INSERT INTO download_external_table
Содержание раздела
Поддерживается в версиях: 7.7 / 7.6 / 7.5 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10 / 6.9 / 6.8 / 6.7 / 6.6 / 6.5 / 6.4 / 6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7 / 5.6 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.
Запрос выгружает данные из логической БД в топик Kafka, указанный при создании внешней таблицы выгрузки (download_external_table). Формат выгрузки описан в разделе Формат выгрузки данных.
Запросы выгрузки могут балансироваться по датасорсам в зависимости от приоритета, назначенного запросу.
Для небольших объемов данных используйте функцию чтения данных.
Поддерживаемые сущности
Данные можно выгружать из следующих сущностей и их соединений:
- логических таблиц,
- снапшот-таблиц,
- логических представлений,
- материализованных представлений,
- прокси-таблиц,
- standalone-таблиц.
Синтаксис выгрузки из standalone-таблицы подразумевает использование внешней readable-таблицы, которая указывает на нужную standalone-таблицу.
Действия перед запросом
Перед выполнением запроса создайте внешнюю таблицу с указанием пути к топику Kafka. Подробнее о действиях по выгрузке данных см. в разделе Выгрузка данных.
Как работает запрос
Выбор датасорса
Запрос к сущностям, которые хранят непартиционированные данные, выгружает данные из датасорса, выбранного для исполнения запроса.
Запрос к партиционированной таблице автоматически перенаправляется в задействованные партиции и выгружает объединенную выборку по этим партициям из всех датасорсов, выбранных для исполнения запроса.
Запрос напрямую к партиции выбирает данные из указанной партиции.
Статистика
Запросы INSERT INTO download_external_table учитываются в категории DOWNLOAD статистики. Подробнее о категориях запросов в статистике см. в разделе GET_ENTITY_STATISTICS, о способах просмотра статистики — в разделе Управление статистикой.
Синтаксис
INSERT INTO [db_name.]ext_table_name SELECT query
Параметры:
db_name-
Имя логической базы данных, из которой выгружаются данные. Опционально, если выбрана логическая БД, используемая по умолчанию.
ext_table_name-
Имя внешней таблицы выгрузки.
Ключевое слово SELECT query
Задает SELECT-подзапрос для выбора выгружаемых данных.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
- Имена и порядок следования столбцов должны совпадать в SELECT-подзапросе на выгрузку данных и во внешней таблице выгрузки.
- При обработке запроса отключенные (отключенный датасорс: Датасорс, отключенный системой из-за сбоя или администратором
) датасорсы (датасорс: СУБД или кластер СУБД хранилища
) пропускаются без возврата ошибки. Ошибка возвращается, если не осталось включенных (включенный датасорс: Датасорс, работающий в штатном режиме
) датасорсов, подходящих для исполнения запроса.
Примеры
Выгрузка из наиболее оптимального датасорса
INSERT INTO marketing.sales_ext_download
SELECT * FROM marketing.sales WHERE product_units > 4
Выгрузка из указанного датасорса
INSERT INTO marketing.sales_ext_download
SELECT * FROM marketing.sales WHERE description = 'Покупка по акции 1+1' DATASOURCE_TYPE = 'adqm'
Выгрузка из материализованного представления
INSERT INTO marketing.sales_by_stores_ext_download
SELECT * FROM matview_db.sales_by_stores WHERE product_code IN ('ABC0002', 'ABC0003', 'ABC0004') DATASOURCE_TYPE = 'adp2'
Выгрузка из снапшот-таблицы
-- создание внешней таблицы выгрузки
CREATE DOWNLOAD EXTERNAL TABLE marketing.sales_snapshot_ext_download (
id BIGINT,
transaction_date TIMESTAMP,
product_code VARCHAR(256),
product_units BIGINT,
store_id BIGINT,
description VARCHAR(256)
)
LOCATION 'kafka://$kafka/sales_snapshot_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;
-- выгрузка данных из снапшот-таблицы
INSERT INTO marketing.sales_snapshot_ext_download
SELECT * FROM marketing.sales_snapshot AS s
WHERE transaction_date >= DATE_TRUNC(YEAR, TIMESTAMPADD(YEAR, -1, current_date));
Выгрузка из прокси-таблицы
-- создание внешней таблицы выгрузки
CREATE DOWNLOAD EXTERNAL TABLE marketing.payments_ext_download_from_proxy (
id BIGINT,
agreement_id BIGINT,
code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR
)
LOCATION 'kafka://$kafka/payments_adp_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;
-- выгрузка данных из прокси-таблицы
INSERT INTO marketing.payments_ext_download_from_proxy
SELECT *
FROM marketing.payments_proxy AS s
WHERE id BETWEEN 100 AND 200 AND amount >= 1000 AND currency_code = 'RUB';
Выгрузка из standalone-таблицы
-- создание внешней таблицы выгрузки
CREATE DOWNLOAD EXTERNAL TABLE marketing.payments_ext_download (
id BIGINT NOT NULL,
agreement_id BIGINT,
code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR
)
LOCATION 'kafka://$kafka/payments_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;
-- выгрузка данных из standalone-таблицы, на которую указывает внешняя readable-таблица payments_ext_read_adqm
INSERT INTO marketing.payments_ext_download
SELECT s.id, s.agreement_id, s.code, s.amount, s.currency_code, s.description
FROM marketing.payments_ext_read_adqm AS s
WHERE code = 'MONTH_FEE' AND agreement_id BETWEEN 100 AND 150;
Выгрузка из партиционированной таблицы
-- создание внешней таблицы выгрузки
CREATE DOWNLOAD EXTERNAL TABLE marketing.sales_partitioned_download (
id BIGINT NOT NULL,
transaction_date TIMESTAMP NOT NULL,
product_code VARCHAR,
product_units BIGINT,
store_id BIGINT,
description VARCHAR
)
LOCATION 'kafka://$kafka/sales_partitioned_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;
-- выгрузка данных из партиционированной таблицы
INSERT INTO marketing.sales_partitioned_download
SELECT *
FROM marketing.sales_partitioned
WHERE id > 100