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

Содержание раздела
  1. Поддерживаемые сущности
  2. Способы загрузки данных
    1. Потоковая загрузка данных
    2. Загрузка данных из Kafka
  3. Управление загружаемыми записями (sys_op)
  4. Обработка загружаемых записей
    1. Особенности загрузки в партиции
    2. Заполнение столбцов таблицы
    3. Целевые датасорсы

Загрузка данных — параллельная запись данных в систему из внешнего источника данных. Функция предназначена для записи большого объема данных: от сотен до миллионов строк.

Загружать данные можно в любые поддерживаемые СУБД.

Поддерживаемые сущности

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

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

Управление записями Логическая таблица,
снапшот-таблица
Прокси-таблица,
standalone-таблица
Добавление новых записей + +
Обновление текущих записей + Только в ADP
Удаление текущих записей +

Способы загрузки данных

Возможны следующие способы загрузки:

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

Потоковая загрузка данных

Загрузить поток данных можно по HTTP с помощью метода upload, как описано в разделе Работа с данными > Потоковая загрузка данных.

Загрузка данных из Kafka

Загрузить данные из Kafka можно, отправив запрос INSERT SELECT FROM external_table, как описано в разделе Загрузка данных из Kafka > Как загрузить данные.

Доступные способы загрузки (сравнение см. в таблице ниже):

Внешняя таблица Целевые СУБД Коннектор Частичная загрузка (WHERE, LIMIT, OFFSET)
Таблица загрузки Любые из поддерживаемых
  • [ADP] Kafka Postgres Writer,
  • [ADB] Kafka-Greenplum PXF connector Writer,
  • [ADQM] Kafka-Clickhouse Writer,
  • [ADG] Kafka-Tarantool loader
Недоступна
Readable-таблица Только ADP Kafka Jet writer Доступна

Управление загружаемыми записями (sys_op)

Для управления записями, загружаемыми в логические таблицы и снапшот-таблицы, предназначено системное значение sys_op:

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

В зависимости от способа загрузки данных значение sys_op можно задать индивидуально для каждой записи или сразу для всех загружаемых записей.

При загрузке данных в прокси- и standalone-таблицы значение sys_op указывать не нужно. Но если оно указано и в таблице есть одноименный столбец, значение сохраняется как есть и не влияет на порядок обработки записи.

Обработка загружаемых записей

Обработка каждой загружаемой записи зависит от наличия/отсутствия в таблице записи с таким же первичным ключом (PK), а также значений опций set.on.conflict.do и set.delete.tracking.enable таблицы (для снапшот-таблиц), как показано ниже.

Таблица PK новый или таблица без PK PK совпадает и sys_op=0 PK совпадает и sys_op=1
Логическая таблица Добавление новой записи Обновление записи Удаление записи
Снапшот-таблица Добавление новой записи
  • [set.on.conflict.do=update] обновление записи;
  • [set.on.conflict.do=error] ошибка;
  • [set.on.conflict.do=nothing] пропуск записи
  • [set.delete.tracking.enable=false] удаление записи;
  • [set.delete.tracking.enable=true и set.on.conflict.do=error] ошибка;
  • [set.delete.tracking.enable=true и set.on.conflict.do=nothing] пропуск записи
Прокси-, standalone-таблица Добавление новой записи
  • [ADP] обновление записи;
  • [ADB, ADQM, ADG] ошибка или вставка записи с дубликатом PK (зависит от СУБД)

Особенности загрузки в партиции

Загрузка в партиции имеет особенности:

  • [через партиционированную таблицу] записи распределяются по партициям; записи вне диапазонов партиций игнорируются;
  • [напрямую в партиции] записи вне диапазонов партиции игнорируются.

Заполнение столбцов таблицы

При загрузке данных столбцы заполняются:

  • [указанные в запросе столбцы] значениями из загружаемых данных;
  • [пропущенные nullable-столбцы] значениями, используемыми по умолчанию в СУБД.

Пропуск в запросе обязательных столбцов (NOT NULL) таблицы не поддерживается: возвращается ошибка.

Целевые датасорсы

При загрузке данные записываются во все включенные датасорсы целевой таблицы. Отключенные датасорсы пропускаются.

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

Датасорсы таблицы можно указать при ее создании. Датасорсы существующей таблицы можно изменять для логических таблиц и снапшот-таблиц командами ALTER TABLE ADD DATASOURCE (добавляет датасорс) и DROP TABLE … DATASOURCE_TYPE (удаляет датасорс).