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

Интерфейс 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 в настоящее время является экспериментальным и находится в активной разработке. Известные ограничения включают:

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

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

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

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

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

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

{} <Information> Application: Arrow Flight compatibility protocol: 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-соединения со стороны клиента. Поддержка более продвинутых функций отмены запланирована.


Для получения дополнительных сведений смотрите: