> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# analyzer_compatibility_* 会话设置

> ClickHouse 在 analyzer_compatibility_* 自动生成分组中的会话设置。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>类型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>默认值</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          无需重启即可更改
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

这些设置可在 [system.settings](/docs/zh/reference/system-tables/settings) 中找到，并根据 [源代码](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 自动生成。

<div id="analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested">
  ## analyzer\_compatibility\_allow\_compound\_identifiers\_in\_unflatten\_nested
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "1"},{"label": "新设置。"}]}]} />

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

<div id="analyzer_compatibility_allow_non_aggregate_in_having">
  ## analyzer\_compatibility\_allow\_non\_aggregate\_in\_having
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "新的兼容性设置。启用后，analyzer 会模拟旧版将非聚合 AND 合取项从 `HAVING` 重写到 `WHERE` 的行为，而不是抛出 `NOT_AN_AGGREGATE`。"}]}]} />

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

<div id="analyzer_compatibility_join_using_top_level_identifier">
  ## analyzer\_compatibility\_join\_using\_top\_level\_identifier
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.3"},{"label": "0"},{"label": "强制从投影中解析 JOIN USING 里的标识符"}]}]} />

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

<div id="analyzer_compatibility_prefer_alias_over_subcolumn">
  ## analyzer\_compatibility\_prefer\_alias\_over\_subcolumn
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "新增兼容性设置"}]}]} />

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