> ## 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_compaction_* session settings

> ClickHouse session settings in the iceberg_compaction_* generated group.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Default value", "Comment"];
  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
  }}>
        Version history
      </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
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Default</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Changeable without restart
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

These settings are available in [system.settings](/reference/system-tables/settings) and are autogenerated from [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="iceberg_compaction_commit_batch_size">
  iceberg\_compaction\_commit\_batch\_size
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "100"},{"label": "New setting"}]}, {"id": "row-2","items": [{"label": "26.8"},{"label": "100"},{"label": "New setting"}]}]} />

Number of merged data files that background Iceberg compaction accumulates before publishing them in a new snapshot.

Compaction results are published in any case once there are no candidates left to compact, so this setting only bounds
how long already merged files stay unpublished while compaction keeps finding new work. `0` restores the old behaviour
of publishing only when compaction runs out of candidates - a state that is never reached while the table keeps
receiving new data files, so every merged output is then written to object storage and never referenced by a snapshot.

<h2 id="iceberg_compaction_data_cleanup">
  iceberg\_compaction\_data\_cleanup
</h2>

<SettingsInfoBlock type="Seconds" default_value="10800" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "10800"},{"label": "New setting"}]}]} />

The time after which the data will be deleted.

<h2 id="iceberg_compaction_delay_bias">
  iceberg\_compaction\_delay\_bias
</h2>

<SettingsInfoBlock type="Seconds" default_value="10800" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "10800"},{"label": "New setting"}]}]} />

Minimum time of delay between 2 background compaction operations.

<h2 id="iceberg_compaction_max_bytes_in_data_file">
  iceberg\_compaction\_max\_bytes\_in\_data\_file
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "536870912"},{"label": "New setting for the max bytes of an iceberg data file produced by compaction, separate from the insert-time limit. The default is aligned with the documented default of the Iceberg table property `write.target-file-size-bytes` (512 MiB), see https:\/\/iceberg.apache.org\/docs\/1.5.2\/configuration\/. Previously compaction merged all eligible files of a partition into a single output file."}]}, {"id": "row-2","items": [{"label": "26.7"},{"label": "18446744073709551615"},{"label": "New setting for the max bytes of an iceberg data file produced by compaction, separate from the insert-time limit."}]}]} />

Max bytes of an iceberg parquet data file produced by compaction.

The default mirrors the documented default of the Iceberg table property `write.target-file-size-bytes` (512 MiB),
see [https://iceberg.apache.org/docs/1.5.2/configuration/](https://iceberg.apache.org/docs/1.5.2/configuration/). Keep it above
`iceberg_data_file_size_lower_threshold_compaction`, otherwise every output file stays below the lower threshold
and is selected for compaction again.

<h2 id="iceberg_compaction_max_rows_in_data_file">
  iceberg\_compaction\_max\_rows\_in\_data\_file
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "18446744073709551615"},{"label": "New setting for the max rows of an iceberg data file produced by compaction, separate from the insert-time limit."}]}, {"id": "row-2","items": [{"label": "26.7"},{"label": "18446744073709551615"},{"label": "New setting for the max rows of an iceberg data file produced by compaction, separate from the insert-time limit."}]}]} />

Max rows of an iceberg parquet data file produced by compaction. Defaults to the maximum, so the size limit
`iceberg_compaction_max_bytes_in_data_file` alone decides how much data goes into an output file, the same way
Iceberg has no row-count counterpart of `write.target-file-size-bytes`.
