Потоковая загрузка данных
Содержание раздела
Потоковая загрузка данных — загрузка данных порциями по HTTP. Потоковая загрузка позволяет загружать большие объемы данных напрямую, без использования брокера Kafka.
Загрузка потока данных доступна в сущности, перечисленные в разделе Загрузка данных. Целевые сущности могут быть размещены в любых поддерживаемых СУБД.
Размеры и содержимое порций в потоке данных, а также формат загружаемых данных определяются внешней системой.
Поддерживаемые интерфейсы и протоколы
Потоковая загрузка данных доступна при программном подключении по интерфейсу HTTP. Поддерживаются протоколы HTTP/2 и HTTP/1.1.
Форматы загрузки данных
Потоковая загрузка данных возможна в CSV- и Avro-форматах.
Все порции данных, переданные в одном потоке, должны составлять полное представление данных выбранного формата, то есть включать:
- CSV-заголовок и строки данных — в CSV-формате;
- Avro-файл, состоящий из заголовка со схемой данных и блоков данных, — в Avro-формате.
Параметры интерпретации CSV-файлов такие, как символы разделителя строк, кавычек и экранирования значений, задаются в конфигурации в секции csvParser
.
Как загрузить данные
Загрузить поток данных можно с помощью HTTP-метода upload. Подробнее о действиях по потоковой загрузке данных см. в разделе Работа с данными > Потоковая загрузка данных.
Как работает потоковая загрузка данных
Внешняя система формирует поток из порций данных для целевой таблицы и отправляет его в систему Prostore.
Система Prostore обрабатывает поток данных в следующем порядке:
- Принимает порции данных от внешней системы и записывает их в буфер сырых входящих данных. Размер буфера определяется параметром конфигурации
STREAMING_UPLOAD_INPUT_BUFFER_SIZE_MB
и по умолчанию равен 10 Мб. - Из полученных порций данных выделяет записи для вставки в таблицу и сохраняет их в буфер подготовленных для вставки записей. Размер буфера определяется параметром конфигурации
STREAMING_UPLOAD_DB_BUFFER_SIZE
и по умолчанию равен 10000 строк. - По мере накопления подготовленных записей в пачки перемещает эти записи в целевые датасорсы. Размер пачек записей определяется параметром конфигурации
STREAMING_UPLOAD_DB_BATCH_SIZE
и по умолчанию равен 1000 строк. - Если данные загружаются по протоколу HTTP/2, возвращает промежуточный ответ на каждую пачку записей, перемещенную в датасорсы.
- При завершении потока данных возвращает окончательный ответ о результатах загрузки.
Если в загружаемых данных пропущены некоторые столбцы целевой таблицы, при записи данных в таблицу эти столбцы заполняются значениями, используемыми в целевой СУБД по умолчанию (обычно это NULL
).
Сохранение загруженных данных
Записи, загружаемые в логические таблицы, сохраняются в два этапа:
- При переносе записей в датасорсы они сохраняются как данные незавершенной операции записи. Уже перенесенные записи отменяются, если возникает ошибка загрузки или внешняя система отменяет операцию.
- При успешном завершении потоковой загрузки записи сохраняются как текущая версия данных в логической БД. Записи также могут быть сохранены при прерывании загрузки, см. подробнее в секции Прерывание загрузки данных.
Все записи, загруженные в логическую таблицу одним потоком данных, составляют одну операцию записи.
Записи, загружаемые в прокси- и standalone-таблицы, сохраняются как текущие записи таблицы при их переносе в датасорс. Уже перенесенные записи не отменяются, если при загрузке последующих порций данных возникает ошибка.
Прерывание загрузки данных
Потоковая загрузка может прерваться в следующих случаях:
- произошла ошибка загрузки данных;
- внешняя система запустила отмену операции записи, сформированной по запросу на потоковую загрузку;
- внешняя система закрыла соединение, или соединение между внешней системой и Prostore было потеряно.
В первых двух случаях операция записи завершается как неуспешная и загруженные данные отменяются. В последнем случае операция по умолчанию завершается как неуспешная, но включение опции commitOnDisconnect в запросе позволяет завершить операцию как успешную и сохранить загруженные данные.