Перейти к основному содержанию
Перейти к основному содержанию

Интерфейс Apache Arrow Flight

ClickHouse поддерживает интеграцию с протоколом Apache Arrow Flight — высокопроизводительным RPC‑фреймворком, предназначенным для эффективной передачи колоночных данных с использованием формата Arrow IPC поверх gRPC.

Этот интерфейс позволяет клиентам Flight SQL выполнять запросы к ClickHouse и получать результаты в формате Arrow, обеспечивая высокую пропускную способность и низкую задержку для аналитических нагрузок.

Возможности

  • Выполнять SQL‑запросы по протоколу Arrow Flight SQL
  • Передавать результаты запросов в потоковом режиме в формате Apache Arrow
  • Интегрироваться с BI‑инструментами и прикладными решениями для работы с данными, поддерживающими Arrow Flight
  • Обеспечивать легковесный и высокопроизводительный обмен данными по gRPC

Ограничения

Интерфейс Arrow Flight в данный момент является экспериментальным и активно дорабатывается. Известные ограничения:

  • Ограниченная поддержка сложных SQL-возможностей, специфичных для ClickHouse
  • Еще не реализованы все операции с метаданными Arrow Flight SQL
  • В эталонной реализации отсутствуют встроенная аутентификация и настройка TLS

Если вы столкнетесь с проблемами совместимости или хотите внести вклад, пожалуйста, создайте issue в репозитории ClickHouse.

Запуск сервера Arrow Flight

Чтобы включить сервер Arrow Flight в самоуправляемом экземпляре ClickHouse, добавьте следующую конфигурацию в конфигурационный файл сервера:

<clickhouse>
    <arrowflight_port>9005</arrowflight_port>
</clickhouse>

Перезапустите сервер ClickHouse. После успешного запуска вы должны увидеть в логах сообщение, похожее на следующее:

{} <Information> Application: Протокол совместимости Arrow Flight: 0.0.0.0:9005

Подключение к ClickHouse через Arrow Flight SQL

Вы можете использовать любой клиент, который поддерживает Arrow Flight SQL. Например, с помощью pyarrow:

import pyarrow.flight

client = pyarrow.flight.FlightClient("grpc://localhost:9005")
ticket = pyarrow.flight.Ticket(b"SELECT number FROM system.numbers LIMIT 10")
reader = client.do_get(ticket)

for batch in reader:
    print(batch.to_pandas())

Совместимость

Интерфейс Arrow Flight совместим с инструментами, которые поддерживают Arrow Flight SQL, включая собственные приложения, реализованные на:

  • Python (pyarrow)
  • Java (arrow-flight)
  • C++ и других языках, совместимых с gRPC

Если для вашего инструмента доступен нативный коннектор ClickHouse (например, JDBC, ODBC), предпочтительнее использовать именно его, если только Arrow Flight не требуется специально для достижения нужной производительности или совместимости форматов.

Отмена запросов

Долго выполняющиеся запросы можно отменить, закрыв gRPC-соединение на стороне клиента. Поддержка более продвинутых возможностей отмены запланирована.


Для получения дополнительной информации см.: