INSERT INTO download_external_table

Содержание раздела
  1. Поддерживаемые сущности
  2. Действия перед запросом
  3. Как работает запрос
    1. Выбор датасорса
    2. Статистика
  4. Синтаксис
    1. Ключевое слово SELECT query
  5. Варианты ответа
  6. Ограничения
  7. Примеры
    1. Выгрузка из наиболее оптимального датасорса
    2. Выгрузка из указанного датасорса
    3. Выгрузка из материализованного представления
    4. Выгрузка из снапшот-таблицы
    5. Выгрузка из прокси-таблицы
    6. Выгрузка из standalone-таблицы
    7. Выгрузка из партиционированной таблицы

Поддерживается в версиях: 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-таблицы подразумевает использование внешней 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