INSERT SELECT FROM upload_external_table
Содержание раздела
Запрос загружает данные из топика Kafka, указанного при создании внешней таблицы загрузки (upload_external_table), в логическую таблицу или standalone-таблицу.
Загружаемые данные должны соответствовать формату загрузки данных. Перед выполнением запроса необходимо создать внешнюю таблицу загрузки, если она отсутствует, и загрузить данные в топик Kafka. Подробнее о действиях по загрузке данных см. в разделе Загрузка данных.
При загрузке данных в standalone-таблицу нужно учитывать ее ограничения в конкретной СУБД.
Загрузка данных в логические и материализованные представления недоступна.
Для загрузки небольшого объема данных можно использовать обновление данных.
Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на загрузку данных.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса данные загружаются в следующие СУБД хранилища:
- в те СУБД, которые выбраны для размещения данных таблицы, — если данные загружаются в логическую таблицу;
- в ту СУБД, которая содержит standalone-таблицу, — если данные загружаются в standalone-таблицу.
Расположение данных логической таблицы можно задавать запросами CREATE TABLE и DROP TABLE с ключевым словом DATASOURCE_TYPE
.
При загрузке данных в standalone-таблицу ADG, в SELECT-подзапросе нужно указать поле bucket_id
со значением 0
(см. пример ниже). В этом случае значение bucket_id
рассчитается в ADG.
Незавершенную операцию по загрузке данных можно перезапустить или отменить. Подробнее о способах обработки незавершенных операций см. в разделе Управление операциями записи.
Синтаксис
Запрос с явным перечислением столбцов внешней таблицы загрузки:
INSERT INTO [db_name.]table_name SELECT column_list FROM [db_name.]upload_ext_table_name
Запрос с использованием символа *
:
INSERT INTO [db_name.]table_name SELECT * FROM [db_name.]upload_ext_table_name
Параметры:
db_name
-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name
-
Имя таблицы-приемника данных. Возможные значения:
- имя логической таблицы,
- имя внешней writable-таблицы, указывающей на нужную standalone-таблицу.
column_list
-
Список имен всех столбцов внешней таблицы загрузки. Имена, типы и порядок указанных столбцов должны соответствовать именам, типам и порядку столбцов (полей) в таблице-приемнике данных, а также типам и порядку полей в топике Kafka, из которого загружаются данные.
upload_ext_table_name
-
Имя внешней таблицы загрузки.
В сообщениях Kafka, загружаемых в логические таблицы, должно присутствовать служебное поле sys_op
с типом avro.int
. Остальные поля сообщений Kafka должны соответствовать полям внешней таблицы загрузки по порядку и типам. Все поля внешней таблицы загрузки должны соответствовать полям таблицы-приемника данных по порядку, именам и типам.
Подробнее о требованиях к загружаемым данным см. в разделе Формат загрузки данных.
Ограничения
Загрузка данных в логическую таблицу возможна только при наличии открытой дельты (см. BEGIN DELTA).
Примеры
Загрузка данных в логическую таблицу
-- выбор логической базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- запуск загрузки данных в логическую таблицу sales
INSERT INTO sales SELECT * FROM sales_ext_upload;
-- закрытие дельты (фиксация изменений)
COMMIT DELTA;
Загрузка данных в standalone-таблицу
Загрузка в standalone-таблицу ADP, на которую указывает внешняя writable-таблица agreements_ext_write_adp
:
INSERT INTO marketing.agreements_ext_write_adp SELECT * FROM marketing.agreements_ext_upload;
Загрузка в standalone-таблицу ADG, на которую указывает внешняя writable-таблица payments_ext_write_adg
:
INSERT INTO marketing.payments_ext_write_adg SELECT *, 0 as bucket_id FROM marketing.payments_ext_upload;