Описание
ArrowStream — это формат Apache Arrow, работающий в «потоковом режиме». Он предназначен для обработки потоковых данных в памяти.
Пример использования
forex, доступный в
Песочнице ClickHouse. К нему можно подключиться
удалённо с помощью clickhouse-client, используя хост sql-clickhouse.clickhouse.com
и пользователя demo (без пароля). Таблица forex находится в базе данных
forex, поэтому мы выбираем её в качестве базы данных по умолчанию:
forex хранит курсы валют. Мы можем оценить её размер и
степень сжатия на диске, выполнив запрос к system.columns:
Query
Response
Arrow в режиме “file mode”, которому
для чтения нужен результат целиком, ArrowStream передаётся как
последовательность батчей записей, которые потребитель может читать по мере их
поступления. Благодаря этому он хорошо подходит для стриминга результата запроса напрямую в
инструмент визуализации или аналитики без предварительной материализации всего набора данных.
Чтобы передавать результат потоком, отправьте запрос через HTTP-интерфейс ClickHouse с
помощью запроса POST и считывайте ответ как поток Arrow. Мы отключаем сжатие
вывода Arrow с помощью настройки
output_format_arrow_compression_method,
чтобы потребители могли декодировать батчи напрямую по мере получения.
Вывод ArrowStream представляет собой необработанные двоичные данные, поэтому вместо вывода в
терминал мы направляем его в потребитель. Поток является самоописывающимся (он содержит
собственную схему), поэтому здесь мы направляем его напрямую в
clickhouse-local, который читает
входящие батчи с помощью --input-format ArrowStream и выполняет к ним запросы как к таблице.
Таблица forex большая, поэтому мы ограничиваем удалённый запрос с помощью предиката WHERE
и LIMIT, чтобы этот пример оставался компактным:
Response
RecordBatchReader возвращает каждый батч записей сразу после его получения от
server:
ArrowStream из ClickHouse в
визуализацию в реальном времени с Perspective см. в
записи блога
Потоковая визуализация в реальном времени с ClickHouse, Apache Arrow и Perspective.
Настройки формата
ArrowStream использует те же настройки формата, что и Arrow.