Выгрузка данных

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

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

Под большим объемом данных подразумевается количество записей от нескольких сотен до нескольких миллионов. Для получения небольшого объема данных можно использовать функцию запроса данных.

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

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

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

  1. Создайте внешнюю таблицу выгрузки, если она еще не создана.
  2. Выполните запрос INSERT INTO download_external_table. В запросе укажите внешнюю таблицу выгрузки, определяющую параметры выгрузки.

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

Данные выгружаются из следующей СУБД хранилища:

  • указанной в запросе или наиболее оптимальной — если данные выгружаются из логических таблиц, логических и материализованных представлений;
  • содержащей standalone-таблицу — если данные выгружаются из standalone-таблицы или ее соединений с другими сущностями.

Примеры

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

-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;

-- создание внешней таблицы для выгрузки из логической таблицы sales
CREATE DOWNLOAD EXTERNAL TABLE sales_ext_download (
  id INT,
  transaction_date TIMESTAMP,
  product_code VARCHAR(256),
  product_units INT,
  store_id INT,
  description VARCHAR(256)
)
LOCATION  'kafka://zk1:2181,zk2:2181,zk3:2181/sales_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;

-- запуск выгрузки данных из логической таблицы sales
INSERT INTO sales_ext_download 
SELECT * FROM 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 INT,
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 = 'adqm';

Выгрузка из standalone-таблицы

-- создание внешней таблицы выгрузки
CREATE DOWNLOAD EXTERNAL TABLE marketing.payments_ext_download (
id INT NOT NULL,
agreement_id INT,
code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR
)
LOCATION 'kafka://$kafka/agreements_out'
FORMAT 'AVRO'
CHUNK_SIZE 1000;

-- запуск выгрузки данных из standalone-таблицы, на которую указывает внешняя readable-таблица payments_ext_read_adg
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_adg AS s
WHERE code = 'MONTH_FEE' AND agreement_id BETWEEN 100 AND 150;