Клиент (0.7.x и ранее)
Java клиентская библиотека для взаимодействия с сервером БД через его протоколы. Текущая реализация поддерживает только HTTP интерфейс. Библиотека предоставляет собственный API для отправки запросов на сервер.
Эта библиотека будет вскоре устаревать. Используйте последнюю Java Client для новых проектов
Настройка
- Maven
- Gradle (Kotlin)
- Gradle
Начиная с версии 0.5.0
, драйвер использует новую библиотеку клиентского http, которую необходимо добавить в качестве зависимости.
- Maven
- Gradle (Kotlin)
- Gradle
Инициализация
Формат URL-подключения: protocol://host[:port][/database][?param[=value][¶m[=value]][#tag[,tag]]
, например:
http://localhost:8443?ssl=true&sslmode=NONE
https://(https://explorer@play.clickhouse.com:443
Подключение к единственному узлу:
Подключение к кластеру с несколькими узлами:
API запросов
API стриминговых запросов
Смотрите полный пример кода в репозитории.
API вставки
Смотрите полный пример кода в репозитории.
Кодирование RowBinary
Формат RowBinary описан на его странице.
Есть пример кода.
Особенности
Сжатие
Клиент по умолчанию будет использовать сжатие LZ4, для чего требуется эта зависимость:
- Maven
- Gradle (Kotlin)
- Gradle
Вы можете выбрать использование gzip, установив compress_algorithm=gzip
в URL-подключения.
Кроме того, вы можете отключить сжатие несколькими способами.
- Отключите, установив
compress=0
в URL-подключения:http://localhost:8123/default?compress=0
- Отключите через конфигурацию клиента:
Смотрите документацию по сжатию, чтобы узнать больше о различных вариантах сжатия.
Множественные запросы
Выполните несколько запросов в рабочем потоке один за другим в одной сессии:
Именованные параметры
Вы можете передавать параметры по имени, а не полагаясь исключительно на их позицию в списке параметров. Эта возможность доступна с использованием функции params
.
Все подписи params
, содержащие тип String
(String
, String[]
, Map<String, String>
), предполагают, что переданные ключи являются действительными строками SQL ClickHouse. Например:
Если вы предпочитаете не преобразовывать объекты String в SQL ClickHouse вручную, вы можете использовать вспомогательную функцию ClickHouseValues.convertToSqlExpression
, расположенную в com.clickhouse.data
:
В приведенном выше примере ClickHouseValues.convertToSqlExpression
экранирует внутреннюю одинарную кавычку и окружает переменную действительными одинарными кавычками.
Другие типы, такие как Integer
, UUID
, Array
и Enum
, будут автоматически преобразованы внутри params
.
Обнаружение узлов
Java клиент предоставляет возможность автоматически обнаруживать узлы ClickHouse. Автообнаружение по умолчанию отключено. Чтобы вручную включить его, установите auto_discovery
в true
:
Или в URL-подключении:
Если автообнаружение включено, нет необходимости указывать все узлы ClickHouse в URL-подключении. Узлы, указанные в URL, будут рассматриваться как начальные, а Java клиент автоматически обнаружит дополнительные узлы из системных таблиц и/или clickhouse-keeper или zookeeper.
Следующие параметры отвечают за конфигурацию автообнаружения:
Свойство | Значение по умолчанию | Описание |
---|---|---|
auto_discovery | false | Должен ли клиент обнаруживать дополнительные узлы из системных таблиц и/или clickhouse-keeper/zookeeper. |
node_discovery_interval | 0 | Интервал обнаружения узлов в миллисекундах, нулевое или отрицательное значение означает одноразовое обнаружение. |
node_discovery_limit | 100 | Максимальное количество узлов, которые могут быть обнаружены за раз; нулевое или отрицательное значение означает отсутствие ограничения. |
Балансировка нагрузки
Java клиент выбирает узел ClickHouse для отправки запросов согласно политике балансировки нагрузки. В общем, политика балансировки нагрузки отвечает за следующие вещи:
- Получение узла из управляемого списка узлов.
- Управление статусом узла.
- Опционально планирование фонового процесса для обнаружения узлов (если автообнаружение включено) и проведение проверки состояния.
Вот список опций для настройки балансировки нагрузки:
Свойство | Значение по умолчанию | Описание |
---|---|---|
load_balancing_policy | "" | Политика балансировки нагрузки может быть одной из: firstAlive - запрос отправляется первому здоровому узлу из управляемого списка узловrandom - запрос отправляется на случайный узел из управляемого списка узловroundRobin - запрос отправляется каждому узлу из управляемого списка узлов по очереди.ClickHouseLoadBalancingPolicy - пользовательская политика балансировки нагрузки |
load_balancing_tags | "" | Теги балансировки нагрузки для фильтрации узлов. Запросы отправляются только на узлы, имеющие указанные теги |
health_check_interval | 0 | Интервал проверки состояния в миллисекундах, нулевое или отрицательное значение означает одноразовую проверку. |
health_check_method | ClickHouseHealthCheckMethod.SELECT_ONE | Метод проверки состояния. Может быть одним из: ClickHouseHealthCheckMethod.SELECT_ONE - проверка с помощью запроса select 1 ClickHouseHealthCheckMethod.PING - специфическая для протокола проверка, которая обычно быстрее |
node_check_interval | 0 | Интервал проверки узлов в миллисекундах, отрицательное число рассматривается как ноль. Статус узла проверяется, если прошло указанное количество времени с момента последней проверки. Разница между health_check_interval и node_check_interval в том, что опция health_check_interval планирует фоновую работу, которая проверяет состояние для списка узлов (всех или неисправных), а node_check_interval определяет количество времени, прошедшего с момента последней проверки конкретного узла |
check_all_nodes | false | Следует ли выполнять проверку состояния для всех узлов или только для неисправных. |
Перезапуск и повторная попытка
Java клиент предоставляет параметры конфигурации для настройки поведения перезапуска и повторной попытки для неудавшихся запросов:
Свойство | Значение по умолчанию | Описание |
---|---|---|
failover | 0 | Максимальное количество раз, когда может произойти перезапуск для запроса. Нулевое или отрицательное значение означает отсутствие перезапуска. Перезапуск отправляет неудавшийся запрос на другой узел (в соответствии с политикой балансировки нагрузки), чтобы восстановить выполнение после сбоя. |
retry | 0 | Максимальное количество раз, когда может произойти повторная попытка для запроса. Нулевое или отрицательное значение означает отсутствие повторных попыток. Повторная попытка отправляет запрос на тот же узел и только в том случае, если сервер ClickHouse возвращает код ошибки NETWORK_ERROR |
repeat_on_session_lock | true | Следует ли повторять выполнение, когда сессия заблокирована до истечения времени ожидания (в соответствии с session_timeout или connect_timeout ). Неудавшийся запрос повторяется, если сервер ClickHouse возвращает код ошибки SESSION_IS_LOCKED |
Добавление пользовательских http заголовков
Java клиент поддерживает HTTP/S уровень транспортировки, если мы хотим добавить пользовательские HTTP заголовки к запросу.
Мы должны использовать свойство custom_http_headers, а заголовки должны разделяться ,
. Ключ/значение заголовка должны разделяться с помощью =