Skip to main content
这些设置可在 system.settings 中找到,并根据 源代码 自动生成。

analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested

允许向 Nested 中添加复合标识符。这是一项兼容性设置,因为它会改变查询结果。禁用时,SELECT a.b.c FROM table ARRAY JOIN a 将无法工作,而 SELECT a FROM tableNested a 结果中也不会包含 a.b.c 列。

analyzer_compatibility_allow_non_aggregate_in_having

启用后,analyzer 会模拟旧版行为:将非聚合 AND 合取项从 HAVING 移到 WHERE,而不是抛出 NOT_AN_AGGREGATE。默认行为是按标准进行拒绝;此设置可作为迁移辅助,用于处理那些曾被旧版 analyzer (enable_analyzer = 0) 静默接受的查询。包含聚合、grouping 或非确定性函数的合取项会保留在 HAVING 中。如果任一合取项包含窗口函数或有状态函数 (例如 rowNumberInBlock) ,则整个 HAVING 的此类重写都会被禁用,这与旧版 PredicateExpressionsOptimizer 的行为一致。当 GROUP BY 使用 WITH CUBEWITH ROLLUPWITH TOTALSGROUPING SETS 时,该设置同样会被忽略。

analyzer_compatibility_join_using_top_level_identifier

强制从投影中解析 JOIN USING 里的标识符 (例如,在 SELECT a + 1 AS b FROM t1 JOIN t2 USING (b) 中,JOIN 将根据 t1.a + 1 = t2.b 执行,而不是 t1.b = t2.b) 。

analyzer_compatibility_prefer_alias_over_subcolumn

当像 b.id 这样的多部分标识符既可能表示别名为 b 的表中的列 id,也可能表示另一列的 Tuple 子列 b.id 时,优先按别名前缀来解析 (即 b 的列 id) 。默认情况下,analyzer 会优先解析为子列。启用此设置可与旧版 analyzer 的解析方式保持一致。
最后修改于 2026年7月23日