全局设置
common 包访问这些设置:
在使用
clickhouse_connect.get_client 方法创建客户端之前,务必先修改这些常用设置:autogenerate_session_id、product_name 和 readonly。在客户端创建后再更改这些设置,不会影响现有客户端的行为。压缩
enable_http_compression 必须设置为 1,或者用户必须具有按“每次查询”更改该设置的 permission。
调用 clickhouse_connect.get_client 工厂 method 时,可通过 compress parameter 控制压缩。默认情况下,compress 设置为 True,这会启用默认压缩设置。对于通过 query、query_np 和 query_df client methods 执行的查询,ClickHouse Connect 会添加 Accept-Encoding 请求头,其中包含
lz4、zstd、br (如果已安装 brotli 库,则表示 brotli) 、gzip 和 deflate 编码;这些编码会用于通过 query client method 执行的查询 (以及间接通过 query_np 和 query_df 执行的查询) 。 (对于绝大多数请求,ClickHouse
server 会返回使用 zstd 压缩的载荷。) 对于插入操作,默认情况下 ClickHouse Connect 会使用 lz4 压缩插入块,并发送 Content-Encoding: lz4 HTTP 请求头。
get_client 的 compress parameter 也可以设置为特定的压缩方法,即 lz4、zstd、br 或 gzip 之一。随后,该方法将同时用于插入和查询结果 (如果 ClickHouse server 支持) 。现在,所需的 zstd 和 lz4 压缩库默认会随 ClickHouse Connect 一起安装。如果指定 br/brotli,则必须单独安装 brotli 库。
请注意,raw* client methods 不会使用 client configuration 中指定的压缩设置。
我们也不建议使用 gzip 压缩,因为无论是压缩还是解压数据,它都明显比其他方案更慢。
HTTP 代理支持
urllib3 库提供基础的 HTTP 代理支持。它可识别标准的 HTTP_PROXY 和 HTTPS_PROXY 环境变量。请注意,使用这些环境变量会影响通过 clickhouse_connect.get_client 方法创建的任何 client。或者,如果要为每个 client 单独配置,可以向 get_client 方法传入 http_proxy 或 https_proxy argument。有关 HTTP 代理支持实现的详细信息,请参阅 urllib3 文档。
如需使用 SOCKS 代理,可以将 urllib3 的 SOCKSProxyManager 作为 pool_mgr argument 传递给 get_client。请注意,这需要直接安装 PySocks 库,或为 urllib3 依赖项启用 [socks] 选项。
“旧” JSON 数据类型
Object (或 Object('json')) 数据类型已弃用,应避免在生产环境中使用。出于向后兼容的考虑,ClickHouse Connect 仍为该数据类型提供有限支持。请注意,这种支持不包括那些预期会以字典或等效类型返回“顶层”或“父级” JSON 值的查询,这类查询会导致异常。
“新” Variant/Dynamic/JSON 数据类型 (Experimental 功能)
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 代码优化,因此性能可能会比更简单、更成熟的数据类型稍慢。