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

Содержание раздела
  1. Поддерживаемые интерфейсы и протоколы
  2. Форматы загрузки данных
  3. Как загрузить данные
  4. Как работает потоковая загрузка данных
    1. Целевые датасорсы
    2. Этапы загрузки данных
      1. Этап 1: подготовка записей
      2. Этап 2: загрузка подготовленных записей в датасорсы
      3. Этап 3: завершение загрузки
    3. Прерывание загрузки данных

Потоковая загрузка данных — загрузка данных порциями по HTTP. Потоковая загрузка позволяет загружать большие объемы данных напрямую, не используя брокер Kafka.

Загрузка потока данных доступна в сущности, перечисленные в разделе Загрузка данных. Целевые сущности могут быть размещены в любых поддерживаемых СУБД.

Размеры и содержимое порций в потоке данных, а также формат загружаемых данных (из поддерживаемых) определяются внешней системой.

Поддерживаемые интерфейсы и протоколы

Потоковая загрузка данных доступна при программном подключении по интерфейсу HTTP. Поддерживаются протоколы HTTP/2 и HTTP/1.1.

Форматы загрузки данных

Потоковая загрузка данных возможна в CSV- и Avro-форматах.

Все порции данных, переданные в одном потоке, должны включать:

  • [CSV-формат] CSV-заголовок и строки данных;
  • [Avro-формат] Avro-файл, состоящий из заголовка, содержащего схему данных, и блоков данных.

Параметры интерпретации CSV-файлов такие, как символы разделителя строк, кавычек и экранирования значений, задаются в конфигурации в секции csvParser.

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

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

Как работает потоковая загрузка данных

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

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

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

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

Этапы загрузки данных

Внешняя система формирует поток из порций данных для целевой таблицы и отправляет его в систему Prostore.

Система Prostore обрабатывает поток данных в следующем порядке:

  1. Подготавливает записи.
  2. Перемещает подготовленные записи в целевые датасорсы.
  3. Завершает загрузку.

Все записи, загружаемые в логическую таблицу или снапшот-таблицу одним потоком данных, составляют одну операцию записи.

Этап 1: подготовка записей

Prostore подготавливает записи в следующем порядке:

  1. Принимает порции данных от внешней системы и записывает их в буфер сырых данных.
  2. Из полученных порций данных выделяет записи для вставки в таблицу и сохраняет их в буфер подготовленных записей.

Размеры буферов управляются параметрами STREAMING_UPLOAD_INPUT_BUFFER_SIZE_MB и STREAMING_UPLOAD_DB_BUFFER_SIZE.

Этап 2: загрузка подготовленных записей в датасорсы

Prostore загружает подготовленные записи в целевые датасорсы в следующем порядке:

  1. Накапливает записи в пачки.
  2. По мере накопления загружает пачки записей в датасорсы и сохраняет их:
    • [для логических и снапшот-таблиц] как данные незавершенной операции записи;
    • [для прокси- и standalone-таблиц] как текущие записи таблицы.
  3. [HTTP/2] Возвращает промежуточный ответ на каждую загруженную пачку записей.

Размер пачек записей управляется параметром STREAMING_UPLOAD_DB_BATCH_SIZE.

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

Этап 3: завершение загрузки

Prostore завершает загрузку в следующем порядке:

  • При успешной загрузке всех записей из переданного потока данных:
    1. [Для логических и снапшот-таблиц] Фиксирует записи, загруженные в датасорсы, как текущее состояние данных и завершает операцию записи.
    2. Возвращает окончательный ответ об успешной загрузке.
  • При прерывании загрузки:
    1. Обрабатывает данные, уже загруженные в датасорсы и буферы (см. Прерывание загрузки данных).
    2. Возвращает окончательный ответ о неуспешной загрузке.

Прерывание загрузки данных

Потоковая загрузка может прерваться в случаях:

  • произошла ошибка загрузки данных;
  • внешняя система запустила отмену операции записи, сформированной по запросу потоковой загрузки;
  • внешняя система закрыла соединение, или соединение между внешней системой и Prostore было потеряно.

Результат прерванной загрузки зависит от ее причины и опции commitOnDisconnect запроса, как показано в таблице ниже.

Таблица Разрыв соединения при commitOnDisconnect=false, ошибка загрузки или отмена операции Разрыв соединения при commitOnDisconnect=true
Логическая, снапшот-таблица
  1. Буферы очищаются.
  2. Данные, загруженные в датасорсы, отменяются.
  3. Операция записи завершается как неуспешная
  1. Данные из буферов догружаются в датасорсы.
  2. Данные, загруженные в датасорсы, фиксируются как текущее состояние данных.
  3. Операция записи завершается как успешная
Прокси-, standalone-таблица
  1. Буферы очищаются.
  2. Данные, загруженные в датасорсы, остаются в них
  1. Данные из буферов догружаются в датасорсы.
  2. Данные, загруженные в датасорсы, остаются в них