Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

prefer_* 会话设置

这些设置可在 system.settings 中找到,并由 源代码 自动生成。

prefer_column_name_to_alias

类型
Bool
默认值
0

启用或禁用在查询表达式和子句中使用原始列名而非别名。在别名与列名相同时,这一点尤为重要,参见 Expression Aliases。启用此设置可使 ClickHouse 中的别名语法规则与大多数其他数据库引擎更兼容。

可能的值:

  • 0 — 列名会被替换为别名。
  • 1 — 列名不会被替换为别名。

示例

启用与禁用时的区别:

查询:

SET prefer_column_name_to_alias = 0;
SELECT avg(number) AS number, max(number) FROM numbers(10);

结果:

Received exception from server (version 21.5.1):
Code: 184. DB::Exception: Received from localhost:9000. DB::Exception: Aggregate function avg(number) is found inside another aggregate function in query: While processing avg(number) AS number.

查询:

SET prefer_column_name_to_alias = 1;
SELECT avg(number) AS number, max(number) FROM numbers(10);

结果:

┌─number─┬─max(number)─┐
│    4.5 │           9 │
└────────┴─────────────┘

prefer_external_sort_block_bytes

类型
UInt64
默认值
16744704
版本历史
版本默认值注释
24.516744704外部排序时优先使用最大块字节数,以减少合并期间的内存使用量。

外部排序时优先使用最大块字节数,以减少合并期间的内存使用量。

prefer_global_in_and_join

类型
Bool
默认值
0

启用将 IN/JOIN 运算符替换为 GLOBAL IN/GLOBAL JOIN

可能的值:

  • 0 — 已禁用。IN/JOIN 运算符不会被替换为 GLOBAL IN/GLOBAL JOIN
  • 1 — 已启用。IN/JOIN 运算符会被替换为 GLOBAL IN/GLOBAL JOIN

用法

虽然 SET distributed_product_mode=global 可以改变分布式表的查询行为,但它不适用于本地表或来自外部资源的表。这正是 prefer_global_in_and_join 设置发挥作用的时候。

例如,我们有一些提供查询服务的节点,其中包含本地表,而这些表不适合做分布式处理。我们需要在分布式处理中使用 GLOBAL 关键字——GLOBAL IN/GLOBAL JOIN——动态地将这些数据分发出去。

prefer_global_in_and_join 的另一个用例是访问由 external engine 创建的表。此设置有助于在连接这类表时减少对外部数据源的调用次数:每个查询只调用一次。

另请参阅:

prefer_localhost_replica

类型
Bool
默认值
1

启用/禁用在处理分布式查询时优先使用 localhost 副本。

可能的值:

  • 1 — 如果存在 localhost 副本,ClickHouse 始终将查询发送到该副本。
  • 0 — ClickHouse 使用 load_balancing 设置指定的负载均衡策略。

prefer_warmed_unmerged_parts_seconds

仅限 ClickHouse Cloud
类型
Int64
默认值
0

仅在 ClickHouse Cloud 中生效。如果某个 merged 分片 距合并完成还不到这么多秒,且尚未预热 (参见 cache_populated_by_fetch) ,但它的所有 source 分片 都可用且已预热,则 SELECT 查询会改为从这些 分片 读取。仅适用于 Replicated-/SharedMergeTree。请注意,这里只检查 CacheWarmer 是否处理过该分片;如果该分片是通过其他方式被拉取到缓存中的,那么在 CacheWarmer 处理到它之前,仍会被视为冷分片;如果它曾被预热,之后又从缓存中被驱逐,仍会被视为热分片。

Navigation