INSERT INTO — Amazon Athena

INSERT INTO — Amazon Athena

Рекомендации и ограниченияINSERT INTO…SELECTINSERT INTO…VALUES

Вставляет новые строки в целевую таблицу на основе оператора запроса SELECT который работает на исходной таблице или на основе набора VALUES , предоставленного как часть заявление. Когда исходная таблица основана на базовых данных в одном формате, например CSV или JSON, а целевая таблица основана на другом формате, таком как Parquet или ORC, вы можно использовать INSERT INTO запросов для преобразования выбранных данных в целевые формат таблицы.

Особенности и ограничения

При использовании запросов INSERT с Athena учитывайте следующее.

  • При выполнении запроса INSERT к таблице с базовыми данными, которые зашифрован в Amazon S3, выходные файлы, которые пишет запрос INSERT не шифруются по умолчанию.

    Мы рекомендуем вам зашифровать ВСТАВИТЬ результаты запроса, если вы вставляете в таблицы с зашифрованными данными.

    Дополнительные сведения о шифровании результатов запроса с помощью консоли см. Шифрование запроса Athena результаты хранятся в запросе Amazon S3 Encrypting Athena результаты при использовании JDBC или ODBC. Включить шифрование с помощью AWS CLI или Athena API, используйте Конфигурация шифрования свойства действия StartQueryExecution для указания параметров шифрования Amazon S3. в соответствии с вашими требованиями.

  • Для операторов INSERT INTO ожидаемая настройка владельца корзины не применяется к расположению целевого стола в Amazon S3. Параметр ожидаемого владельца корзины применяется только к Amazon S3. расположение вывода, указанное вами для результатов запроса Athena. Для дополнительные сведения см. в разделе Указание результата запроса. местоположение с помощью консоли Athena.

  • Для ACID-совместимых операторов INSERT INTO см. INSERT Раздел INTO таблицы «Обновление айсберга» данные.

Поддерживаемые форматы и SerDes

Вы можете выполнить запрос INSERT для таблиц, созданных из данных с следующих форматов и SerDes.

Формат данных СерДе

Авро

org.apache. hadoop.hive.serde2.avro.AvroSerDe

JSON

org.apache.hive.hcatalog.data.JsonSerDe

ОРЦ

org.apache.hadoop.hive.ql.io.orc.OrcSerde

Паркет

org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

Текстовый файл

org.

apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

Примечание

Поддерживаются файлы CSV, TSV и файлы с пользовательскими разделителями.

Таблицы с сегментами не поддерживается

INSERT INTO не поддерживается для таблиц с сегментами. Для большего информацию см. в разделе Разделение и группирование в Athena.

Федеративные запросы не поддерживается

INSERT INTO не поддерживается для федеративных запросов. Попытка сделать поэтому может привести к сообщению об ошибке

Эта операция в настоящее время не поддерживается для внешних каталогов . Для получения информации о федеративных запросы см. в разделе Использование федеративных запросов Amazon Athena.

Разбиение на разделы

Учтите пункты этого раздела при использовании разбиения на разделы с помощью INSERT INTO или CREATE TABLE AS SELECT запросов.

Ограничения

Оператор INSERT INTO поддерживает запись максимум 100 разделы в целевую таблицу. Если вы запускаете

SELECT предложение для таблицы с более чем 100 разделами запрос завершается ошибкой, если только Запрос SELECT ограничен 100 разделами или менее.

Сведения об обходе этого ограничения см. в разделе Использование CTAS и INSERT INTO для обхода ограничения 100 предел раздела.

Порядок столбцов

INSERT INTO или CREATE TABLE AS SELECT инструкции ожидать, что секционированный столбец будет последним столбцом в списке проецируемых столбцы в Оператор SELECT .

Если исходная таблица не секционирована или секционирована по разным столбцам по сравнению с целевой таблицей запросы типа

INSERT INTO таблица_назначения ВЫБРАТЬ * ОТ source_table рассмотреть значения в последний столбец исходной таблицы должен быть значениями для столбца раздела в таблица назначения. Имейте это в виду, когда пытаетесь создать секционированную таблицу. из неразделенной таблицы.

Ресурсы

Для получения дополнительной информации об использовании INSERT INTO с разделением, см. следующие ресурсы.

  • Информацию о вставке секционированных данных в секционированную таблицу см. в разделе Использование CTAS и INSERT INTO для обхода 100 предел раздела.

  • Информацию о вставке неразделенных данных в секционированную таблицу см. в разделе Использование CTAS и INSERT INTO для ETL и данных. анализ.

Файлы, записанные в Amazon S3

Athena записывает файлы в исходные местоположения данных в Amazon S3 в результате Команда ВСТАВИТЬ

. Каждая операция INSERT создает новую файл, а не добавление к существующему файлу. Расположение файлов зависит от структуру таблицы и запрос SELECT , если он есть. Афина генерирует файл манифеста данных для каждого ВСТАВИТЬ запрос. Манифест отслеживает файлы, созданные запросом. Он сохраняется в результате запроса Athena расположение в Amazon S3. Дополнительные сведения см. в разделе Идентификация выходных данных запроса. файлы.

Обнаружение потерянных файлов

Если оператор

CTAS или INSERT INTO не удается, возможно что потерянные данные остаются в расположении данных. Поскольку Афина не удаляет данные (даже частичные данные) из вашей корзины, возможно, вы сможете прочитать этот частичный данные в последующих запросах. Чтобы найти потерянные файлы для проверки или удаления, вы может использовать файл манифеста данных, который предоставляет Athena, для отслеживания списка файлов, которые должны быть написано. Дополнительные сведения см. в разделе Идентификация выходных данных запроса. файлы и DataManifestLocation.

INSERT INTO…SELECT

Задает запрос для выполнения в одной таблице, source_table , который определяет строки для вставки во вторую таблицу, target_table . Если Запрос SELECT указывает столбцы в source_table , столбцы должны точно совпадать со столбцами в таблице .

Дополнительные сведения о запросах SELECT см. в разделе SELECT.

Сводка

 ВСТАВИТЬ В таблицу_назначения
ВЫБЕРИТЕ select_query
FROM source_table_or_view 

Примеры

Выберите все строки в таблице vancouver_pageviews и вставьте их в таблица canada_pageviews :

 INSERT INTO canada_pageviews
ВЫБИРАТЬ *
ОТ vancouver_pageviews; 

Выберите только те строки в таблице vancouver_pageviews , где столбец даты имеет значение от 2019-07-01 и 2019-07-31 , а затем вставьте их в canada_july_pageviews :

 ВСТАВИТЬ В canada_july_pageviews
ВЫБИРАТЬ *
ОТ vancouver_pageviews
ГДЕ дата
    МЕЖДУ датой '2019-07-01'
        И «2019-07-31»; 

Выберите значения в столбцах city и state в city_world таблица только из тех строк со значением usa в столбце country и вставьте их в город и штат столбцов в столбцах city_usa таблица:

 ВСТАВИТЬ В СТРАНИЦЫ_города (город, штат)
ВЫБЕРИТЕ город, штат
ИЗ города_мира
    WHERE country='usa' 

INSERT INTO.

..VALUES

Вставляет строки в существующую таблицу, указывая столбцы и значения. Указанный столбцы и связанные типы данных должны точно соответствовать столбцам и типам данных в таблица назначения.

Важно

Мы не рекомендуем вставлять строки, используя ЗНАЧЕНИЯ , потому что Athena генерирует файлы для каждой операции INSERT . Это может вызвать множество мелких файлы, которые будут созданы, и ухудшат производительность запросов к таблице. Для идентификации файлов который создает запрос INSERT , проверьте файл манифеста данных. Для большего информацию см. в разделе Работа с результатами запроса, последними запросами и выходными данными. файлы.

Краткий обзор

 ВСТАВИТЬ В таблицу_назначения [(col1,col2,...)]
ЗНАЧЕНИЯ (значение столбца1,значение столбца2,...)[
       (значение столбца1,значение столбца2,. ..)][
       ...] 

Примеры

В следующих примерах таблица городов состоит из трех столбцов: id , город , штат , штат_девиз . столбец id имеет тип INT , а все остальные столбцы имеют тип ВАРЧАР .

Вставьте одну строку в таблицу городов со значениями всех столбцов указано:

 ВСТАВИТЬ В города
ЗНАЧЕНИЯ (1,'Lansing','MI','Si quaeris peninsulam amoenamcircuspice') 

Вставить две строки в таблицу городов :

 ВСТАВИТЬ В города
ЗНАЧЕНИЯ (1, 'Лансинг', 'MI', 'Si quaeris peninsulam amoenamcircuspice'),
       (3,'Boise','ID','Esto perpetua') 

Javascript отключен или недоступен в вашем браузере.

Чтобы использовать документацию Amazon Web Services, должен быть включен Javascript. Инструкции см. на страницах справки вашего браузера.

Условные обозначения документов

ВЫБРАТЬ

УДАЛИТЬ

ВСТАВИТЬ

ВСТАВИТЬ
Указатель документации Firebird → Firebird 2.1 Language Ref. Обновить → операторы DML → INSERT
ВСТАВИТЬ… ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ
ВОЗВРАТ пункт
ОБЪЕДИНЕНИЕ разрешено при подаче SELECT

Доступно в: DSQL, ESQL, PSQL

Описание: Добавляет строки в таблицу базы данных или в одну или несколько таблиц, лежащих в основе представления. Значения полей могут быть указаны в предложении VALUES, они могут полностью отсутствовать (в обоих случаях вставляется ровно одна строка) или они могут исходить из оператора SELECT (от 0 до множества вставленных строк).

Синтаксис: 

 ВСТАВИТЬ [ТРАНЗАКЦИЯ   имя   ]
   INTO {   имя_таблицы   |   имя представления   }
   {ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ | [(      )]      }
   [ВОЗВРАТ   <список_значений>    <переменных>   ]]
      ::=   имя_столбца   [   имя_столбца   . ..]
   <источник_значения>   ::= ЗНАЧЕНИЯ (   <список_значений>   ) |     
   <список_значений>   ::=   значение   [   значение   ...]
   <переменные>   ::= :   имя_переменной   [ :   имя_переменной   ...]
      ::= SELECT, набор результатов которого соответствует целевым столбцам 

Ограничения

  • Директива TRANSACTION доступна только в ESQL.

  • Предложение RETURNING недоступно в ESQL.

  • Подпункт «INTO » доступен только в PSQL.

  • При возврате значений в переменную контекста NEW перед этим именем не должно стоять двоеточие (« : »).

  • Начиная с версии 2.0 ни один столбец не может появляться в списке вставки более одного раза.

ВСТАВИТЬ… ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ

Доступно в: DSQL, PSQL

Добавлено в: 2.1

Описание. Предложение DEFAULT VALUES позволяет вставлять запись без указания каких-либо значений ни напрямую, ни из инструкции SELECT. Это возможно только в том случае, если каждый столбец NOT NULL или CHECKed в таблице либо имеет допустимое значение по умолчанию, либо получает такое значение из триггера BEFORE INSERT. Кроме того, триггеры, предоставляющие обязательные значения полей, не должны зависеть от наличия входных значений.

Пример:

 вставить в журнал значения по умолчанию
  возвращаемое предложение entry_id 

RETURNING

Доступно в: DSQL, PSQL

Добавлено в: 2.0

Изменено в: 2.1

Описание: Оператор INSERT, добавляющий не более чем к одной строке , может дополнительно включать предложение RETURNING для возврата значений из вставленной строки. Предложение, если оно присутствует, не обязательно должно содержать все вставляемые столбцы. а также может содержать другие столбцы или выражения. Возвращаемые значения отражают любые изменения, которые могли быть сделаны в триггерах BEFORE, но не в триггерах AFTER.

Примеры: 

 вставить в Scholars (имя, фамилия, адрес, телефон, адрес электронной почты)
  значения («Генри», «Хиггинс», «Уимпол-стрит, 27А», «3231212», ноль)
  возвращая фамилию, полное имя, id 
 вставляем в гантели (имя, фамилия, iq)
  выберите fname, lname, iq из друзей в порядке iq rows 1
  возврат id, firstname, iq в :id, :fname, :iq; 

Примечания:

  • RETURNING поддерживается только для вставок VALUES и, начиная с версии 2. 1, для одноэлементных вставок SELECT.

  • В DSQL оператор с предложением RETURNING всегда возвращает ровно одну строку. Если на самом деле запись не была вставлена, все поля в этой строке имеют значение NULL . Это поведение может измениться в более поздних версиях Firebird. В PSQL, если строка не была вставлена, ничего не возвращается, и принимающие переменные сохраняют свои существующие значения.

UNION разрешено в подаче SELECT

Изменено в: 2.0

Описание: запрос SELECT, используемый в инструкции INSERT, теперь может быть UNION.

Пример:

 вставить в Members (номер, имя)
  выберите номер, имя из NewMembers, где Accepted = 1
    союз
  выберите номер, имя из SuspendedMembers, где Vindicated = 1 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *