Для большинства методов API рекомендуется использовать именованные аргументы, поскольку возможных аргументов много и большинство из них необязательны.Методы, не описанные здесь, не считаются частью API и могут быть удалены или изменены.
Инициализация клиента
clickhouse_connect.driver.client предоставляет основной интерфейс между приложением Python и сервером базы данных ClickHouse. Чтобы получить экземпляр Client, используйте функцию clickhouse_connect.get_client, которая принимает следующие аргументы:
Аргументы подключения
Аргументы HTTPS/TLS
Аргумент settings
settings для get_client используется для передачи серверу дополнительных настроек ClickHouse с каждым клиентским запросом. Обратите внимание, что в большинстве случаев пользователи с доступом readonly=1 не могут изменять настройки, передаваемые вместе с запросом, поэтому ClickHouse Connect отбрасывает такие настройки в итоговом запросе и записывает предупреждение в журнал. Следующие настройки применяются только к HTTP-запросам/сеансам, используемым ClickHouse Connect, и не документированы как общие настройки ClickHouse.
О других настройках ClickHouse, которые можно передавать с каждым запросом, см. в документации ClickHouse.
Примеры создания клиента
- Без параметров клиент ClickHouse Connect подключится к HTTP-порту по умолчанию на
localhostс пользователем по умолчаниюdefaultи без пароля:
- Подключение к защищённому (HTTPS) внешнему серверу ClickHouse
- Подключение с идентификатором сеанса, а также с другими пользовательскими параметрами подключения и настройками ClickHouse.
Жизненный цикл клиента и рекомендации
Основные принципы
- Повторно используйте клиенты: Создавайте клиенты один раз при запуске приложения и используйте их повторно в течение всего жизненного цикла приложения
- Избегайте частого создания: Не создавайте новый клиент для каждого запроса или обращения (это отнимает сотни миллисекунд на каждую операцию)
- Корректно освобождайте ресурсы: Всегда закрывайте клиенты при завершении работы, чтобы освободить ресурсы пула соединений
- По возможности используйте совместно: Один клиент может обрабатывать множество параллельных запросов через свой пул соединений (см. примечания о потоках ниже)
Основные рекомендации
Многопоточные приложения
Правильная очистка
client.close() освобождает клиент и закрывает HTTP-соединения из пула только в том случае, если клиент управляет собственным менеджером пула (например, если он создан с пользовательскими параметрами TLS/прокси). Для общего пула по умолчанию используйте client.close_connections(), чтобы принудительно очистить сокеты; в противном случае соединения будут автоматически освобождены по истечении периода бездействия и при завершении процесса.
Когда использовать несколько клиентов
- Разные серверы: один клиент на каждый сервер ClickHouse или кластер
- Разные учетные данные: отдельные клиенты для разных пользователей или уровней доступа
- Разные базы данных: когда нужно работать с несколькими базами данных
- Изолированные сеансы: когда нужны отдельные сеансы для временных таблиц или настроек, специфичных для сеанса
- Изоляция на уровне потоков: когда потокам нужны независимые сеансы (как показано выше)
Общие аргументы методов
parameters и settings. Они описаны ниже.
Аргумент parameters
query* и command клиента ClickHouse Connect принимают необязательный именованный аргумент parameters, который используется для привязки выражений Python к выражению значения в ClickHouse. Доступны два типа привязки.
Привязка на стороне сервера
{<name>:<datatype>}. При использовании привязки на стороне сервера аргумент parameters должен быть словарём Python.
- Привязка на стороне сервера со словарём Python, значением DateTime и строковым значением
Привязка на стороне клиента
parameters должен быть словарём или последовательностью. При привязке на стороне клиента для подстановки параметров используется форматирование строк Python в стиле “printf”.
Обратите внимание: в отличие от привязки на стороне сервера, привязка на стороне клиента не работает с идентификаторами баз данных, таблиц и столбцов, поскольку форматирование в стиле Python не различает разные типы строк, а для них требуется разное оформление (обратные кавычки или двойные кавычки для идентификаторов базы данных и одинарные кавычки для значений данных).
- Пример с Python-словарём, значением DateTime и экранированием строк
- Пример с последовательностью Python Sequence (Tuple), Float64 и IPv4Address
Для привязки аргументов DateTime64 (типов ClickHouse с точностью до долей секунды) требуется использовать один из двух специальных подходов:
- Оберните значение Python
datetime.datetimeв новый класс DT64Param, например:- Если используется словарь значений параметров, добавьте суффикс
_64к имени параметра
- Если используется словарь значений параметров, добавьте суффикс
Аргумент Settings
settings, который позволяет передавать пользовательские настройки сервера ClickHouse для данного SQL-оператора. Аргумент settings должен быть словарём. Каждый элемент должен содержать имя настройки ClickHouse и соответствующее ей значение. Обратите внимание, что при отправке на сервер в качестве параметров запроса значения будут преобразованы в строки.
Как и в случае с настройками на уровне клиента, ClickHouse Connect отбрасывает любые настройки, которые сервер помечает как readonly=1, с соответствующим сообщением в журнале. Настройки, применимые только к запросам через HTTP-интерфейс ClickHouse, всегда допустимы. Эти настройки описаны в API get_client.
Пример использования настроек ClickHouse:
Метод command клиента
Client.command, чтобы отправлять SQL-запросы на сервер ClickHouse, которые обычно не возвращают данные или возвращают одно примитивное значение либо массив вместо полного набора данных. Этот метод принимает следующие параметры:
Примеры команд
DDL-операторы
Простые запросы, возвращающие одиночные значения
Команды с параметрами
Команды с настройками
Метод query клиента
Client.query — основной способ получить с сервера ClickHouse один датасет в виде «батча». Он использует нативный формат ClickHouse поверх HTTP для эффективной передачи больших наборов данных (примерно до одного миллиона строк). Этот метод принимает следующие параметры:
Примеры запросов
Простой запрос
Доступ к результатам запроса
Запрос с параметрами на стороне клиента
Запрос с параметрами на стороне сервера
Запрос с настройками
Объект QueryResult
query возвращает объект QueryResult со следующими публичными свойствами:
result_rows— Матрица возвращённых данных в виде последовательности строк, где каждый элемент строки представляет собой последовательность значений столбцов.result_columns— Матрица возвращённых данных в виде последовательности столбцов, где каждый элемент столбца представляет собой последовательность значений строк для этого столбцаcolumn_names— Кортеж строк, содержащий имена столбцов вresult_setcolumn_types— Кортеж экземпляров ClickHouseType, представляющих тип данных ClickHouse для каждого столбца вresult_columnsquery_id—query_idзапроса к ClickHouse (полезно для анализа запроса в таблицеsystem.query_log)summary— Любые данные, возвращённые в заголовке HTTP-ответаX-ClickHouse-Summaryfirst_item— Вспомогательное свойство для получения первой строки ответа в виде словаря (ключи — имена столбцов)first_row— Вспомогательное свойство, возвращающее первую строку результатаcolumn_block_stream— Генератор результатов запроса в столбцово-ориентированном формате. К этому свойству не следует обращаться напрямую (см. ниже).row_block_stream— Генератор результатов запроса в построчно-ориентированном формате. К этому свойству не следует обращаться напрямую (см. ниже).rows_stream— Генератор результатов запроса, который возвращает по одной строке за вызов. К этому свойству не следует обращаться напрямую (см. ниже).summary— Как описано для методаcommand, словарь со сводной информацией, возвращаемой ClickHouse
*_stream возвращают объект Python Context, который можно использовать как итератор для возвращённых данных. Обращаться к ним следует только косвенно, используя методы *_stream клиента Client.
Подробное описание стриминга результатов запроса (с использованием объектов StreamContext) приведено в разделе Расширенные запросы (потоковый запрос).
Получение результатов запросов с помощью NumPy, Pandas или Arrow
Методы потокового выполнения запросов в клиенте
Метод клиента insert
Client.insert. Он принимает следующие параметры:
Этот метод возвращает словарь со «сводкой запроса», как описано для метода
command. Если вставка завершится ошибкой по любой причине, будет вызвано исключение.
Описание специализированных методов вставки, работающих с Pandas DataFrames, PyArrow Tables и DataFrames на базе Arrow, см. в разделе Расширенная вставка (Специализированные методы вставки).
Массив NumPy является допустимым Sequence of Sequences и может использоваться как аргумент
data для основного метода insert, поэтому специализированный метод не требуется.Примеры
users со схемой (id UInt32, name String, age UInt8).
Базовая построчная вставка
Вставка в столбцовом формате
Вставка с явным указанием типов столбцов
Вставка в определённую базу данных
Вставка из файлов
Raw API
Вспомогательные классы и функции
clickhouse-connect и, как и классы и методы, описанные выше, остаются стабильными в рамках минорных релизов. Несовместимые изменения в этих классах и функциях будут вноситься только в минорных (а не патч-) релизах, при этом они как минимум в течение одного минорного релиза будут иметь статус устаревших.
Исключения
DB API 2.0) объявлены в модуле clickhouse_connect.driver.exceptions. Исключения, которые фактически обнаруживает драйвер, будут относиться к одному из этих типов.
Утилиты ClickHouse SQL
clickhouse_connect.driver.binding можно использовать для корректного формирования и экранирования запросов ClickHouse SQL. Аналогично, функции из модуля clickhouse_connect.driver.parser можно использовать для разбора названий типов данных ClickHouse.