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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Принимает порции данных от внешней системы и записывает их в буфер сырых входящих данных. Размер буфера определяется параметром конфигурации STREAMING_UPLOAD_INPUT_BUFFER_SIZE_MB и по умолчанию равен 10 Мб.
  2. Из полученных порций данных выделяет записи для вставки в таблицу и сохраняет их в буфер подготовленных для вставки записей. Размер буфера определяется параметром конфигурации STREAMING_UPLOAD_DB_BUFFER_SIZE и по умолчанию равен 10000 строк.
  3. По мере накопления подготовленных записей в пачки перемещает эти записи в целевые датасорсы. Размер пачек записей определяется параметром конфигурации STREAMING_UPLOAD_DB_BATCH_SIZE и по умолчанию равен 1000 строк.
  4. Если данные загружаются по протоколу HTTP/2, возвращает промежуточный ответ на каждую пачку записей, перемещенную в датасорсы.
  5. При завершении потока данных возвращает окончательный ответ о результатах загрузки.

Если в загружаемых данных пропущены некоторые столбцы целевой таблицы, при записи данных в таблицу эти столбцы заполняются значениями, используемыми в целевой СУБД по умолчанию (обычно это NULL).

Сохранение загруженных данных

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

  1. При переносе записей в датасорсы они сохраняются как данные незавершенной операции записи. Уже перенесенные записи отменяются, если возникает ошибка загрузки или внешняя система отменяет операцию.
  2. При успешном завершении потоковой загрузки записи сохраняются как текущая версия данных в логической БД. Записи также могут быть сохранены при прерывании загрузки, см. подробнее в секции Прерывание загрузки данных.

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

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

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

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

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

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