INSERT INTO download_external_table
Содержание раздела
Поддерживается в версиях: 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. Подробнее о действиях по выгрузке данных см. в разделе Выгрузка данных.
Выгрузка непартиционированных данных
Запрос к сущностям, которые хранят непартиционированные данные, выгружает данные из следующего датасорса:
- указанного в запросе или наиболее оптимального — если данные выгружаются из логических таблиц, материализованных представлений, а также из логических представлений, SELECT-подзапрос которых не содержит партиционированных таблиц;
- содержащего таблицу-источник — если данные выгружаются из прокси-таблицы или standalone-таблицы, а также их соединений с другими сущностями.
Выгрузка партиционированных данных
Запрос к партиционированной таблице автоматически перенаправляется в задействованные партиции и выгружает объединенную выборку по этим партициям из всех датасорсов, выбранных для исполнения запроса. Подробнее о выборе датасорсов см. в разделе Маршрутизация запросов к данным > Маршрутизация запросов к партиционированным таблицам.
Запрос напрямую к партиции выбирает данные из указанной партиции.
Статистика
Запросы INSERT INTO download_external_table учитываются в категории статистики DOWNLOAD. Статистика доступна с помощью запроса GET_ENTITY_STATISTICS и GET-методов получения статистики.
Синтаксис
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 marketing.sales_by_stores WHERE product_code IN ('ABC0002', 'ABC0003', 'ABC0004') DATASOURCE_TYPE = 'adp2'
Выгрузка из прокси-таблицы
-- создание внешней таблицы выгрузки
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