跳转到主要内容
ClickHouse Connect 提供了许多适用于高级用例的其他选项。

全局设置

只有少量设置项可用于全局控制 ClickHouse Connect 的行为。可通过顶层 common 包访问这些设置:
from clickhouse_connect import common

common.set_setting('autogenerate_session_id', False)
common.get_setting('invalid_setting_action')
'drop'
在使用 clickhouse_connect.get_client 方法创建客户端之前,务必先修改这些常用设置:autogenerate_session_idproduct_namereadonly。在客户端创建后再更改这些设置,不会影响现有客户端的行为。
当前定义了以下全局设置:
设置名称默认值可选值说明
autogenerate_session_idTrueTrue, False为每个客户端会话自动生成一个新的 UUID(1) 会话 ID (如果未提供) 。如果未提供会话 ID (无论是在客户端级别还是查询级别) ,ClickHouse 都会为每个查询生成一个随机的内部 ID。
dict_parameter_format’json''json’, ‘map’控制参数化查询是将 Python 字典转换为 JSON,还是转换为 ClickHouse Map 语法。json 应用于插入 JSON 列,map 用于 ClickHouse Map 列。
invalid_setting_action’error''drop’, ‘send’, ‘error’当提供了无效设置或只读设置时 (无论是客户端会话还是查询级别) ,指定要采取的操作。如果为 drop,则忽略该设置;如果为 send,则将该设置发送给 ClickHouse;如果为 error,则会在客户端抛出 ProgrammingError。
max_connection_age600HTTP Keep-Alive 连接保持打开或复用的最长时间 (秒) 。这可避免在负载均衡器/代理后方,连接过度集中到某一个 ClickHouse 节点。默认值为 10 分钟。
product_name随查询一起传递给 ClickHouse 的字符串,用于跟踪使用 ClickHouse Connect 的应用。应采用 <product name;&gl/<product version> 的格式。
readonly00, 1适用于 19.17 之前版本的隐式 “read_only” ClickHouse 设置。可将其设置为与 ClickHouse 的 “read_only” 设置值一致,以便兼容非常旧的 ClickHouse 版本。
send_os_userTrueTrue, False在发送给 ClickHouse 的客户端信息中包含检测到的操作系统用户名 (HTTP User-Agent 字符串) 。
send_integration_tagsTrueTrue, False在发送给 ClickHouse 的客户端信息中包含所使用的集成库及其版本 (例如 Pandas/SQLAlchemy 等) (HTTP User-Agent 字符串) 。
use_protocol_versionTrueTrue, False使用客户端协议版本。这是 DateTime 时区列所必需的,但会与当前版本的 chproxy 不兼容。
max_error_size1024客户端错误消息返回的最大字符数。将此设置设为 0 可获取完整的 ClickHouse 错误消息。默认值为 1024 个字符。
http_buffer_size10MB用于 HTTP 流式查询的“内存中”缓冲区大小 (以字节为单位) 。
preserve_pandas_datetime_resolutionFalseTrue, False当为 True 且使用 pandas 2.x 时,会保留 datetime64/timedelta64 dtype 的分辨率 (例如 ‘s’、‘ms’、‘us’、‘ns’) 。如果为 False (或在 pandas <2.x 中) ,则会强制转换为纳秒 (‘ns’) 分辨率以保持兼容性。

压缩

ClickHouse Connect 支持对查询结果和插入使用 lz4、zstd、brotli 和 gzip 压缩。请始终记住,使用压缩通常需要在网络带宽/传输速度与 CPU 使用率之间进行权衡 (客户端和服务器端都是如此) 。 要接收压缩数据,ClickHouse server 的 enable_http_compression 必须设置为 1,或者用户必须具有按“每次查询”更改该设置的 permission。 调用 clickhouse_connect.get_client 工厂 method 时,可通过 compress parameter 控制压缩。默认情况下,compress 设置为 True,这会启用默认压缩设置。对于通过 queryquery_npquery_df client methods 执行的查询,ClickHouse Connect 会添加 Accept-Encoding 请求头,其中包含 lz4zstdbr (如果已安装 brotli 库,则表示 brotli) 、gzipdeflate 编码;这些编码会用于通过 query client method 执行的查询 (以及间接通过 query_npquery_df 执行的查询) 。 (对于绝大多数请求,ClickHouse server 会返回使用 zstd 压缩的载荷。) 对于插入操作,默认情况下 ClickHouse Connect 会使用 lz4 压缩插入块,并发送 Content-Encoding: lz4 HTTP 请求头。 get_clientcompress parameter 也可以设置为特定的压缩方法,即 lz4zstdbrgzip 之一。随后,该方法将同时用于插入和查询结果 (如果 ClickHouse server 支持) 。现在,所需的 zstdlz4 压缩库默认会随 ClickHouse Connect 一起安装。如果指定 br/brotli,则必须单独安装 brotli 库。 请注意,raw* client methods 不会使用 client configuration 中指定的压缩设置。 我们也不建议使用 gzip 压缩,因为无论是压缩还是解压数据,它都明显比其他方案更慢。

HTTP 代理支持

ClickHouse Connect 通过 urllib3 库提供基础的 HTTP 代理支持。它可识别标准的 HTTP_PROXYHTTPS_PROXY 环境变量。请注意,使用这些环境变量会影响通过 clickhouse_connect.get_client 方法创建的任何 client。或者,如果要为每个 client 单独配置,可以向 get_client 方法传入 http_proxyhttps_proxy argument。有关 HTTP 代理支持实现的详细信息,请参阅 urllib3 文档。 如需使用 SOCKS 代理,可以将 urllib3SOCKSProxyManager 作为 pool_mgr argument 传递给 get_client。请注意,这需要直接安装 PySocks 库,或为 urllib3 依赖项启用 [socks] 选项。

“旧” JSON 数据类型

实验性的 Object (或 Object('json')) 数据类型已弃用,应避免在生产环境中使用。出于向后兼容的考虑,ClickHouse Connect 仍为该数据类型提供有限支持。请注意,这种支持不包括那些预期会以字典或等效类型返回“顶层”或“父级” JSON 值的查询,这类查询会导致异常。

“新” Variant/Dynamic/JSON 数据类型 (Experimental 功能)

从 0.8.0 版本开始,clickhouse-connect 开始对新的 (同样处于 Experimental 阶段的) ClickHouse 类型 Variant、Dynamic 和 JSON 提供实验性支持。

使用说明

  • JSON 数据可以作为 Python 字典插入,也可以作为包含 JSON 对象 {} 的 JSON 字符串插入。不支持其他形式的 JSON 数据。
  • 对这些类型使用 subcolumns/paths 的查询将返回该子列的类型。
  • 其他使用说明请参见 ClickHouse 文档

已知限制

  • 使用这些类型前,必须先在 ClickHouse 设置中启用它们。
  • “新” JSON 类型自 ClickHouse 24.8 版本起可用。
  • 由于内部格式发生变化,clickhouse-connect 仅兼容 ClickHouse 24.7 及以上版本中的 Variant 类型。
  • 返回的 JSON 对象最多只会返回 max_dynamic_paths 个元素 (默认值为 1024) 。此问题将在未来版本中修复。
  • 插入到 Dynamic 列中的值始终会采用 Python 值的字符串表示形式。待 https://github.com/ClickHouse/ClickHouse/issues/70395 修复后,此问题将在未来版本中修复。
  • 这些新类型的实现尚未用 C 代码优化,因此性能可能会比更简单、更成熟的数据类型稍慢。
最后修改于 2026年6月10日