Потоковая загрузка данных
Содержание раздела
Потоковая загрузка данных — загрузка данных порциями по 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: подготовка записей
Prostore подготавливает записи в следующем порядке:
- Принимает порции данных от внешней системы и записывает их в буфер сырых данных.
- Из полученных порций данных выделяет записи для вставки в таблицу и сохраняет их в буфер подготовленных записей.
Размеры буферов управляются параметрами STREAMING_UPLOAD_INPUT_BUFFER_SIZE_MB и STREAMING_UPLOAD_DB_BUFFER_SIZE.
Этап 2: загрузка подготовленных записей в датасорсы
Prostore загружает подготовленные записи в целевые датасорсы в следующем порядке:
- Накапливает записи в пачки.
- По мере накопления загружает пачки записей в датасорсы и сохраняет их:
- [для логических и снапшот-таблиц] как данные незавершенной операции записи;
- [для прокси- и standalone-таблиц] как текущие записи таблицы.
- [HTTP/2] Возвращает промежуточный ответ на каждую загруженную пачку записей.
Размер пачек записей управляется параметром STREAMING_UPLOAD_DB_BATCH_SIZE.
Порядок загрузки записей в зависимости от значения первичного ключа, а также порядок обработки столбцов, не указанных в запросе, см. в разделе Загрузка данных.
Этап 3: завершение загрузки
Prostore завершает загрузку в следующем порядке:
- При успешной загрузке всех записей из переданного потока данных:
- [Для логических и снапшот-таблиц] Фиксирует записи, загруженные в датасорсы, как текущее состояние данных и завершает операцию записи.
- Возвращает окончательный ответ об успешной загрузке.
- При прерывании загрузки:
- Обрабатывает данные, уже загруженные в датасорсы и буферы (см. Прерывание загрузки данных).
- Возвращает окончательный ответ о неуспешной загрузке.
Прерывание загрузки данных
Потоковая загрузка может прерваться в случаях:
- произошла ошибка загрузки данных;
- внешняя система запустила отмену операции записи, сформированной по запросу потоковой загрузки;
- внешняя система закрыла соединение, или соединение между внешней системой и Prostore было потеряно.
Результат прерванной загрузки зависит от ее причины и опции commitOnDisconnect запроса, как показано в таблице ниже.
| Таблица | Разрыв соединения при commitOnDisconnect=false, ошибка загрузки или отмена операции | Разрыв соединения при commitOnDisconnect=true |
|---|---|---|
| Логическая, снапшот-таблица |
|
|
| Прокси-, standalone-таблица |
|
|