group_by_overflow_mode
设置当用于 聚合 的唯一键数量超过限制时的行为:throw:抛出异常break:停止执行查询并返回部分结果any:继续对已进入集合的键进行聚合,但不再向集合中添加新键。
any 值可以执行 GROUP BY 的近似计算。这种近似计算的效果取决于数据的统计特性。
group_by_top_k_optimization_observation_rows
对于enable_group_by_top_k_optimization:在冻结一个完整 top-K 堆之前,每个聚合 stream 观察的行数;该堆跳过的输入行不足 10%,且驱逐的键数少于其容量。堆被冻结后,聚合会像禁用该优化一样继续执行。
有效窗口至少是堆预留大小的两倍,因此堆在接受评估前始终有机会填满。0 会禁用此冻结机制 (当边界并列集合增长到超过堆容量时,堆仍会被冻结) 。
这不会影响不含 ORDER BY 的 GROUP BY keys LIMIT K 查询,这类查询始终禁用冻结:该形态的执行计划包含一个合成排序,只有堆能够限制哈希表时才有收益,因此冻结堆会使执行计划比未优化的计划更慢。
group_by_top_k_optimization_shared_boundary
用于enable_group_by_top_k_optimization:在各聚合线程之间共享最紧的跳过边界。每个线程每处理完一个块,若其自身 top-K 集合的边界收紧了,就会发布该边界;所有线程都依据已发布的最优边界 (而不只是自身的边界) 来跳过行。只要存在 K 个严格优于某行的键,就足以证明该行不可能进入最终结果,无论这些键由哪个线程持有。因此,共享边界不会改变结果,只是让本地键排名靠后的线程 (例如键值在表中呈聚集分布时) 能够跳过那些原本会被白白聚合的行。
可选值:
- 0 — 禁用。
- 1 — 启用。
group_by_two_level_threshold
键的数量达到多少时开始启用两级聚合。0 表示未设置该阈值。group_by_two_level_threshold_bytes
当聚合状态的大小达到多少字节时,开始使用两级聚合。0 表示未设置阈值。当至少一个阈值达到条件时,将使用两级聚合。group_by_use_nulls
更改 GROUP BY clause 处理聚合键类型的方式。 使用ROLLUP、CUBE 或 GROUPING SETS 说明符时,某些聚合键可能不会用于生成某些结果行。
这些键对应的列会根据此设置,在相应行中填入默认值或 NULL。
Possible values:
- 0 — 使用聚合键类型的默认值来填补缺失值。
- 1 — ClickHouse 会按照 SQL 标准的方式执行
GROUP BY。聚合键的类型会转换为 Nullable。对于未使用相应聚合键的行,其对应列会填充为 NULL。