Как выгрузить данные

Содержание раздела
  1. Создание топика (опционально)
  2. Выгрузка данных в топик
  3. Примеры
    1. Выгрузка из логической таблицы
    2. Выгрузка из материализованного представления
    3. Выгрузка из прокси-таблицы
    4. Выгрузка из standalone-таблицы

Система позволяет выгружать данные в топики брокера сообщений Kafka. Данные можно выгружать из следующих сущностей и их соединений:

Чтобы получить запрошенные данные в ответе без использования брокера Kafka, используйте функцию запроса данных.

Создание топика (опционально)

Данные выгружаются из системы в виде сообщений топиков Kafka. Поэтому, если в брокере сообщений Kafka не настроено автоматическое создание топиков, создайте топики вручную.

Чтобы создать топик, следуйте любой из инструкций в документации Kafka:

Рекомендации о разделении данных по топикам см. в разделе Рекомендации по топикам Kafka.

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

Чтобы выгрузить данные из системы топик Kafka:

  1. Создайте внешнюю таблицу выгрузки, если она отсутствует.
  2. Выполните запрос INSERT INTO download_external_table:
    • чтобы выполнить запрос в синхронном режиме, отправьте его по JDBC или по HTTP с помощью POST-метода query без параметра async (или с параметром async, имеющим значение false);
    • чтобы выполнить запрос в асинхронном режиме, отправьте его по HTTP с помощью POST-метода query, где в теле сообщения укажите параметр async со значением true.

Подробнее об асинхронных запросах см. в разделе Асинхронные запросы и операции.

После выгрузки созданную внешнюю таблицу выгрузки можно использовать повторно или удалить.

Примеры

Выгрузка из логической таблицы

-- создание внешней таблицы для выгрузки из логической таблицы sales
CREATE DOWNLOAD EXTERNAL TABLE marketing.sales_ext_download (
  id BIGINT,
  transaction_date TIMESTAMP,
  product_code VARCHAR(256),
  product_units BIGINT,
  store_id BIGINT,
  description VARCHAR(256)
)
LOCATION 'kafka_brokers://10.129.0.22:9092,10.129.0.123:9092/sales_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;

-- запуск выгрузки данных из логической таблицы sales
INSERT INTO marketing.sales_ext_download 
SELECT * FROM marketing.sales WHERE product_units > 2 FOR SYSTEM_TIME AS OF DELTA_NUM 10;

Выгрузка из материализованного представления

-- создание внешней таблицы для выгрузки из материализованного представления sales_by_stores
CREATE DOWNLOAD EXTERNAL TABLE sales_by_stores_ext_download (
store_id BIGINT,
product_code VARCHAR(256),
product_units INT
)
LOCATION 'kafka://$kafka/sales_by_stores_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;

-- запуск выгрузки данных из материализованного представления sales_by_stores
INSERT INTO sales_by_stores_ext_download
SELECT * FROM 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;