这些设置可在 system.settings 中找到,并由 源代码 自动生成。
prefer_column_name_to_alias
启用或禁用在查询表达式和子句中使用原始列名而非别名。在别名与列名相同时,这一点尤为重要,参见 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
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.5 | 16744704 | 外部排序时优先使用最大块字节数,以减少合并期间的内存使用量。 |
外部排序时优先使用最大块字节数,以减少合并期间的内存使用量。
prefer_global_in_and_join
启用将 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 创建的表。此设置有助于在连接这类表时减少对外部数据源的调用次数:每个查询只调用一次。
另请参阅:
- 分布式子查询,了解有关如何使用
GLOBAL IN/GLOBAL JOIN的更多信息
prefer_localhost_replica
启用/禁用在处理分布式查询时优先使用 localhost 副本。
可能的值:
- 1 — 如果存在 localhost 副本,ClickHouse 始终将查询发送到该副本。
- 0 — ClickHouse 使用 load_balancing 设置指定的负载均衡策略。
prefer_warmed_unmerged_parts_seconds
仅在 ClickHouse Cloud 中生效。如果某个 merged 分片 距合并完成还不到这么多秒,且尚未预热 (参见 cache_populated_by_fetch) ,但它的所有 source 分片 都可用且已预热,则 SELECT 查询会改为从这些 分片 读取。仅适用于 Replicated-/SharedMergeTree。请注意,这里只检查 CacheWarmer 是否处理过该分片;如果该分片是通过其他方式被拉取到缓存中的,那么在 CacheWarmer 处理到它之前,仍会被视为冷分片;如果它曾被预热,之后又从缓存中被驱逐,仍会被视为热分片。