INSERT INTO download_external_table

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

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

Выгрузка непартиционированных данных

Запрос к сущностям, которые хранят непартиционированные данные, выгружает данные из следующего датасорса:

  • указанного в запросе или наиболее оптимального — если данные выгружаются из логических таблиц, материализованных представлений, а также из логических представлений, 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