Загрузка данных
Содержание раздела
Загрузка данных — параллельная запись данных в систему из внешнего источника данных. Функция предназначена для записи большого объема данных: от сотен до миллионов строк.
Загружать данные можно в любые поддерживаемые СУБД.
Поддерживаемые сущности
Загрузка данных возможна в следующие сущности:
С помощью загрузки данных можно управлять записями сущностей, как показано в таблице ниже.
| Управление записями | Логическая таблица, снапшот-таблица | Прокси-таблица, standalone-таблица |
|---|---|---|
| Добавление новых записей | + | + |
| Обновление текущих записей | + | Только в ADP |
| Удаление текущих записей | + | – |
Способы загрузки данных
Возможны следующие способы загрузки:
- потоковая загрузка — загрузка данных напрямую из внешней системы без использования брокера Kafka;
- загрузка из Kafka — загрузка данных из топика брокера сообщений Kafka, куда внешняя система предварительно загрузила данные.
Потоковая загрузка данных
Загрузить поток данных можно по HTTP с помощью метода upload, как описано в разделе Работа с данными > Потоковая загрузка данных.
Загрузка данных из Kafka
Загрузить данные из Kafka можно, отправив запрос INSERT SELECT FROM external_table, как описано в разделе Загрузка данных из Kafka > Как загрузить данные.
Доступные способы загрузки (сравнение см. в таблице ниже):
- с помощью внешней таблицы загрузки,
- с помощью внешней readable-таблицы.
| Внешняя таблица | Целевые СУБД | Коннектор | Частичная загрузка (WHERE, LIMIT, OFFSET) |
|---|---|---|---|
| Таблица загрузки | Любые из поддерживаемых |
| Недоступна |
| 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 |
|---|---|---|---|
| Логическая таблица | Добавление новой записи | Обновление записи | Удаление записи |
| Снапшот-таблица | Добавление новой записи |
|
|
| Прокси-, standalone-таблица | Добавление новой записи |
| |
Особенности загрузки в партиции
Загрузка в партиции имеет особенности:
- [через партиционированную таблицу] записи распределяются по партициям; записи вне диапазонов партиций игнорируются;
- [напрямую в партиции] записи вне диапазонов партиции игнорируются.
Заполнение столбцов таблицы
При загрузке данных столбцы заполняются:
- [указанные в запросе столбцы] значениями из загружаемых данных;
- [пропущенные nullable-столбцы] значениями, используемыми по умолчанию в СУБД.
Пропуск в запросе обязательных столбцов (NOT NULL) таблицы не поддерживается: возвращается ошибка.
Целевые датасорсы
При загрузке данные записываются во все включенные датасорсы целевой таблицы. Отключенные датасорсы пропускаются.
Запись данных в логическую таблицу или снапшот-таблицу считается успешной, если данные записаны в необходимые датасорсы; запись в прокси- или standalone-таблицу — если данные записаны в ее единственный датасорс.
Датасорсы таблицы можно указать при ее создании. Датасорсы существующей таблицы можно изменять для логических таблиц и снапшот-таблиц командами ALTER TABLE ADD DATASOURCE (добавляет датасорс) и DROP TABLE … DATASOURCE_TYPE (удаляет датасорс).