> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# iceberg_* 会话设置

> 属于 iceberg_* 生成组的 ClickHouse 会话设置。

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental 功能
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["版本", "默认值", "注释"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        版本历史
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

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](/zh/reference/system-tables/settings) 中查看，并根据 [源代码](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 自动生成。

<h2 id="iceberg_delete_data_on_drop">
  iceberg\_delete\_data\_on\_drop
</h2>

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

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

执行 drop 时，是否删除所有 Iceberg 文件。

<h2 id="iceberg_file_entries_queue_size">
  iceberg\_file\_entries\_queue\_size
</h2>

<SettingsInfoBlock type="NonZeroUInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "100"},{"label": "为此前硬编码的队列容量（位于 Iceberg data manifest 解码任务与查询之间）新增的设置。"}]}]} />

Iceberg data manifest 解码任务与查询之间队列的容量，以数据文件条目数计。

队列已满且查询未消费数据时，解码任务会暂停，因此该设置也限定了预读量。

必须大于零。

<h2 id="iceberg_manifest_decode_concurrency">
  iceberg\_manifest\_decode\_concurrency
</h2>

**Aliases**: `iceberg_delete_manifest_decode_concurrency`

<SettingsInfoBlock type="NonZeroUInt64" default_value="4" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "4"},{"label": "新增设置，用于限制并发解码的 Iceberg manifest 文件数量，对 delete manifest 和 data manifest 同样适用。它取代了 `iceberg_delete_manifest_decode_concurrency`（保留为别名）。取值 `2` 近似于 26.9 之前的数据路径行为：一次解码一个 manifest，同时下一个 manifest 的拉取已在进行中；因此当 `compatibility` 为 26.8 或更低时，delete 解码也会以 2 而非其发布默认值 4 运行，从而保持旧数据路径的内存占用规模，代价是损失部分 delete 解码的重叠执行。"}]}]} />

读取表时并发解码的 Iceberg manifest 文件的最大数量。

所有 delete manifest 都会在读取任何数据文件之前解码完成；data manifest 则在生成查询所需的数据文件列表的过程中解码，且只有当查询消费掉已解码的条目后，才会继续解码新的 manifest。同时解码多个 manifest，可以让对象存储的往返请求与逐条目的裁剪工作重叠进行。

当 Iceberg 元数据文件缓存被禁用或已满时，取值越高峰值内存占用越大，因为此时每个处理中的 manifest 都会各自持有自己解码后的内容。

该值必须大于零；取 `1` 表示逐个解码 manifest。

<h2 id="iceberg_manifest_min_count_to_compact">
  iceberg\_manifest\_min\_count\_to\_compact
</h2>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "100"},{"label": "与 Iceberg 表属性 `commit.manifest.min-count-to-merge` 的文档默认值（100）保持一致，参见 https:\/\/iceberg.apache.org\/docs\/1.5.2\/configuration\/。"}]}, {"id": "row-2","items": [{"label": "26.7"},{"label": "30"},{"label": "用于控制 Iceberg 表 manifest 合并整理的新设置。"}]}]} />

通过 OPTIMIZE TABLE ... MANIFEST 触发仅针对 manifest 的合并整理所需的最少 manifest 文件数量。
如果当前 manifest 文件数量小于或等于该阈值，则会跳过合并整理。
需要启用 allow\_experimental\_iceberg\_compaction。

该默认值与 Iceberg 表属性 `commit.manifest.min-count-to-merge` 的文档默认值 (100) 保持一致，
参见 [https://iceberg.apache.org/docs/1.5.2/configuration/。](https://iceberg.apache.org/docs/1.5.2/configuration/。)

<h2 id="iceberg_max_number_datafiles_to_compact">
  iceberg\_max\_number\_datafiles\_to\_compact
</h2>

<SettingsInfoBlock type="UInt64" default_value="1000" />

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

Iceberg 中参与合并整理的数据文件数量阈值。

<h2 id="iceberg_orphan_files_older_than_seconds">
  iceberg\_orphan\_files\_older\_than\_seconds
</h2>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="259200" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "259200"},{"label": "新增默认孤立文件期限阈值设置"}]}]} />

Iceberg 表中删除孤立文件时使用的默认文件期限阈值 (以秒为单位) 。新于该阈值的文件不会被视为孤立文件。当在 `remove_orphan_files()` 过程调用中省略 `older_than` 参数时，将使用此设置。默认值为 259200 (3 天) 。

<h2 id="iceberg_snapshot_id">
  iceberg\_snapshot\_id
</h2>

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

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

使用指定的快照 ID 查询 Iceberg 表。

<h2 id="iceberg_timestamp_ms">
  iceberg\_timestamp\_ms
</h2>

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

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

使用特定时间戳对应的快照查询 Iceberg 表。

<h2 id="iceberg_tolerate_conflicting_manifest_schemas">
  iceberg\_tolerate\_conflicting\_manifest\_schemas
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "1"},{"label": "新增设置：当 Iceberg manifest 文件头中携带的 schema 与 metadata.json 中为同一 schema-id 注册的 schema 冲突时，优先采用 metadata.json 中的 schema 并记录一条警告，而不是让查询失败，从而与其他查询引擎的行为保持一致。将 `compatibility` 设为低于 26.10 的版本可恢复此前的严格行为。"}]}]} />

启用时，如果 Iceberg manifest 文件头的 `schema` 键所携带的 schema 与 metadata.json 中已为同一 schema-id 注册的 schema 不一致，则使用 metadata.json 中的 schema，并记录警告后忽略 manifest 头中的副本。禁用时，此类冲突会使查询以 ICEBERG\_SPECIFICATION\_VIOLATION 错误失败。

manifest 头中的 schema 只是 manifest 写入时表 schema 的一份副本，而据观察，某些写入器 (例如 AWS S3 Tables 维护作业) 会在其中存储质量降级的副本。其他查询引擎均从 metadata.json 解析 schema 并忽略存在差异的头部副本，因此这里的默认行为与之保持一致。但两个 metadata.json schema 定义之间的冲突始终仍会导致查询失败。
