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

Содержание раздела
  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 (зависит от СУБД)

Обновление записей в снапшот-таблице без первичного ключа не поддерживается: вставляемая запись всегда добавляется как новая.

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

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

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

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

Столбцы добавляемых и обновляемых записей:

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

Столбцы удаляемых записей:

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

* Для добавляемых и обновляемых записей можно пропустить только nullable-столбцы: пропуск обязательных столбцов (NOT NULL) вызывает ошибку. Для удаляемых записей можно пропустить любые столбцы, кроме столбцов первичного ключа.

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

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

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

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