These settings are available in system.settings and are autogenerated from source.
allow_aggregate_partitions_independently
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.7 | 1 | Enable independent per-partition aggregation by default when the partition key suits the GROUP BY key. The existing runtime heuristics in `ReadFromMergeTree::requestOutputEachPartitionThroughSeparatePortForAggregation` already skip the optimization when the partition layout is unfavorable (too few partitions, too many partitions, or significantly skewed partition sizes), so enabling the setting is safe in the cases where it would otherwise be a no-op. |
Enable independent aggregation of partitions on separate threads when partition key suits group by key. Beneficial when number of partitions close to number of cores and partitions have roughly the same size. Heuristics in ReadFromMergeTree automatically disable the optimization for unfavorable layouts (too few partitions, too many partitions, or significantly skewed partition sizes); see force_aggregate_partitions_independently to bypass those checks.
allow_archive_path_syntax
Version history
| Version | Default value | Comment |
|---|---|---|
| 24.8 | 1 | Added new setting to allow disabling archive path syntax. |
| 24.5 | 1 | Added new setting to allow disabling archive path syntax. |
File/S3 engines/table function will parse paths with ‘::’ as <archive> :: <file> if the archive has correct extension.
allow_asynchronous_read_from_io_pool_for_merge_tree
Use background I/O pool to read from MergeTree tables. This setting may increase performance for I/O bound queries
allow_calculating_subcolumns_sizes_for_merge_tree_reading
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.3 | 1 | Allow calculating subcolumns sizes for merge tree reading to improve read tasks splitting |
When enabled, ClickHouse will calculate the size of files required for each subcolumn reading for better task and block sizes calculation.
allow_changing_replica_until_first_data_packet
If it’s enabled, in hedged requests we can start new connection until receiving first data packet even if we have already made some progress
(but progress haven’t updated for receive_data_timeout timeout), otherwise we disable changing replica after the first time we made progress.
allow_create_index_without_type
Allow CREATE INDEX query without TYPE. Query will be ignored. Made for SQL compatibility tests.
allow_creating_set_partitions_independently
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 1 | New setting to enable parallel per-partition pre-deduplication of the subquery result when building the set for `IN (subquery)`, when the partition expression is a deterministic function of the subquery output columns. |
Enable parallel per-partition pre-deduplication of the subquery result when building the set for IN (subquery), when the partition expression of the subquery’s MergeTree table is a deterministic function of the subquery output columns. Each partition is read through a separate stream and deduplicated independently, so the single set-filling transform only hashes unique rows. Not applied with FINAL, parallel replicas, or GLOBAL IN. The optimization requests the per-partition read itself only when the data has more than one partition and the largest partition holds at most twice the rows of the average partition (see force_creating_set_partitions_independently to bypass the skew check); when the streams are already partition-disjoint because another per-partition feature split them (for example per-partition LIMIT BY), the pre-deduplication is applied regardless, since the read layout is already fixed. While the set is being built, the per-stream deduplication tables together hold roughly one extra copy of the unique keys.
allow_custom_error_code_in_throwif
Enable custom error code in function throwIf(). If true, thrown exceptions may have unexpected error codes.
allow_ddl
If it is set to true, then a user is allowed to executed DDL queries.
allow_delta_kernel_rs
Beta featureAliases: allow_experimental_delta_kernel_rs
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 1 | New name of `allow_experimental_delta_kernel_rs`, which is no longer experimental and is kept as an alias. The default is unchanged. |
| 25.5 | 1 | New setting. Introduced under the name `allow_experimental_delta_kernel_rs`, which is now an alias of it; the row is carried forward under the canonical name so that it keeps the whole history. |
Allow the delta-kernel-rs implementation for reading Delta Lake tables.
allow_distinct_partitions_independently
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 1 | New setting to enable independent per-partition evaluation of `DISTINCT` when the partition expression is a deterministic function of the `DISTINCT` columns. |
Enable independent DISTINCT evaluation per partition on separate threads when the partition expression is a deterministic function of the DISTINCT columns, skipping the cross-stream merge. Beneficial when the number of partitions is close to the number of cores and partitions have roughly the same size; otherwise a cost heuristic skips it, see max_number_of_partitions_for_independent_distinct and force_distinct_partitions_independently. Not applied with FINAL or parallel replicas.
Not applied when max_rows_in_distinct or max_bytes_in_distinct is set: those limits are enforced by the single DISTINCT transform that sees the whole merged result, so the cross-stream merge is kept to preserve their global meaning.
allow_distributed_ddl
If it is set to true, then a user is allowed to executed distributed DDL queries.
allow_drop_detached
Allow ALTER TABLE … DROP DETACHED PART[ITION] … queries
allow_dynamic_type_in_join_keys
Version history
| Version | Default value | Comment |
|---|---|---|
| 25.10 | 0 | Disallow using Dynamic type in JOIN keys by default |
Allows using Dynamic type in JOIN keys. Added for compatibility. It’s not recommended to use Dynamic type in JOIN keys because comparison with other types may lead to unexpected results.
allow_execute_multiif_columnar
Allow execute multiIf function columnar
allow_fuzz_query_functions
Experimental featureVersion history
| Version | Default value | Comment |
|---|---|---|
| 26.2 | 0 | New setting to enable the fuzzQuery function. |
Enables the fuzzQuery function that applies random AST mutations to a query string.
allow_general_join_planning
Version history
| Version | Default value | Comment |
|---|---|---|
| 25.1 | 1 | Allow more general join planning algorithm when hash join algorithm is enabled. |
Allows a more general join planning algorithm that can handle more complex conditions, but only works with hash join. If hash join is not enabled, then the usual join planning algorithm is used regardless of the value of this setting.
allow_get_client_http_header
Version history
| Version | Default value | Comment |
|---|---|---|
| 24.3 | 0 | Introduced a new function. |
Allow to use the function getClientHTTPHeader which lets to obtain a value of the current HTTP request’s header. It is not enabled by default for security reasons, because some headers, such as Cookie, could contain sensitive info. Note that the X-ClickHouse-*, Authentication and Authorization headers are always restricted and cannot be obtained with this function.
allow_hyperscan
Allow functions that use Hyperscan library. Disable to avoid potentially long compilation times and excessive resource usage.
allow_iceberg_remove_orphan_files
Experimental featureVersion history
| Version | Default value | Comment |
|---|---|---|
| 26.4 | 0 | New setting to gate Iceberg orphan file removal |
Allow to use ‘ALTER TABLE … EXECUTE remove_orphan_files()’ for iceberg tables.
allow_insert_into_iceberg
Beta featureAliases: allow_experimental_insert_into_iceberg
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.2 | 0 | Insert into iceberg was moved to Beta |
| 25.7 | 0 | New setting. |
Allow to execute insert queries into iceberg.
allow_introspection_functions
Enables or disables introspection functions for query profiling.
Possible values:
- 1 — Introspection functions enabled.
- 0 — Introspection functions disabled.
See Also
- Sampling Query Profiler
- System table trace_log
allow_key_condition_coalesce_rewrite
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.5 | 1 | New setting to rewrite predicates of the form `coalesce(a_1, ..., a_N) <op> const` (and equivalently `ifNull`, or with the constant on the left) into a disjunction before index analysis, so per-column primary key and skip indexes on each `a_i` can be used. Partial-constant forms such as `coalesce(a, 42, b)` and `coalesce(a, b, 42)` are also handled. |
Rewrite predicates of the form coalesce(a_1, ..., a_N) <op> const (and equivalently ifNull, or with the constant on the left) into the disjunction (a_1 <op> const) OR (a_1 IS NULL AND a_2 <op> const) OR ... OR (a_1 IS NULL AND ... AND a_{N-1} IS NULL AND a_N <op> const) before index analysis, so per-column primary key and skip indexes on each a_i can be used. Partial-constant forms such as coalesce(a, 42, b) and coalesce(a, b, 42) are handled: the argument list is normalized like coalesce itself (NULL literals dropped, arguments after the first non-Nullable one dropped), and a trailing non-NULL constant, if any, is emitted as the final branch. The rewrite is strictly additive for index pruning; runtime filtering still uses the original predicate.
Additionally, exact equality predicates of the form nullIf(key, sentinel) = const (where sentinel != const and types match exactly) are rewritten to key = const so primary key, partition, and skip indexes on key can prune granules directly. Range and disjunctive nullIf pruning is not supported.
allow_limit_by_partitions_independently
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.6 | 1 | New setting to enable independent per-partition evaluation of `LIMIT BY` when the partition expression is a deterministic function of the `LIMIT BY` columns. |
Enable independent LIMIT BY evaluation per partition on separate threads when the partition expression is a deterministic function of the LIMIT BY columns.
allow_lossy_numeric_supertype
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 0 | New setting that lets if/multiIf/coalesce/ifNull/array/map resolve all-numeric branches with no lossless common type (e.g. Decimal + Float64) to a numeric supertype (Float64, with possible precision loss), so the result can be aggregated. Independent of use_variant_as_common_type: with it off such branches previously raised NO_COMMON_TYPE, with it on they became a Variant; either way they now resolve to Float64. |
When enabled, if/multiIf/coalesce/ifNull/array/map over a set of numeric arguments that has no lossless common type (for example a Decimal and a Float64, or an Int64 and a Float64) resolve to a numeric supertype (Float64) instead of failing, with possible precision loss. This allows the result to be used directly with value-combining aggregate functions like sum, avg, min and max. This is independent of use_variant_as_common_type: the numeric supertype is produced whether or not use_variant_as_common_type is enabled. When disabled (the default), such argument sets have no common type, so they either become a Variant (if use_variant_as_common_type is enabled) or raise NO_COMMON_TYPE.
allow_materialized_view_with_bad_select
Version history
| Version | Default value | Comment |
|---|---|---|
| 25.4 | 0 | Don't allow creating MVs referencing nonexistent columns or tables |
| 24.9 | 1 | Support (but not enable yet) stricter validation in CREATE MATERIALIZED VIEW |
Allow CREATE MATERIALIZED VIEW with SELECT query that references nonexistent tables or columns. It must still be syntactically valid. Doesn’t apply to refreshable MVs. Doesn’t apply if the MV schema needs to be inferred from the SELECT query (i.e. if the CREATE has no column list and no TO table). Can be used for creating MV before its source table.
allow_metadata_only_named_tuple_alter
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 0 | New setting to control metadata-only ALTER for named Tuple subfield additions. |
If true, ALTER MODIFY COLUMN on a named Tuple that only adds new subfields is metadata-only (no data mutation). Set to false to force the old full-mutation behavior.
allow_minmax_index_for_json
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.7 | 0 | Forbid creating minmax skip index on JSON columns by default because the index serialization cannot handle heterogeneous Field values |
Allow creating minmax skip indexes on JSON (Object) columns. Disabled by default because the minmax index serialization path cannot handle heterogeneous Field values that JSON columns may contain.
allow_named_collection_override_by_default
Allow named collections’ fields override by default.
allow_non_metadata_alters
Allow to execute alters which affects not only tables metadata, but also data on disk
allow_nonconst_timezone_arguments
Version history
| Version | Default value | Comment |
|---|---|---|
| 23.4 | 0 | Allow non-const timezone arguments in certain time-related functions like toTimeZone(), fromUnixTimestamp*(), snowflakeToDateTime*(). |
Allow non-const timezone arguments in certain time-related functions like toTimeZone(), fromUnixTimestamp*(), snowflakeIDToDateTime*(). This setting exists only for compatibility reasons. In ClickHouse, the time zone is a property of the data type, respectively of the column. Enabling this setting gives the wrong impression that different values within a column can have different timezones. Therefore, please do not enable this setting.
allow_nullable_tuple_in_extracted_subcolumns
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.3 | 0 | New setting controlling whether extracted Tuple subcolumns can be nullable. |
Controls whether extracted subcolumns of type Tuple(...) can be typed as Nullable(Tuple(...)).
false: ReturnTuple(...)and use default tuple values for rows where the subcolumn is missing.true: ReturnNullable(Tuple(...))and useNULLfor rows where the subcolumn is missing.
This setting controls extracted subcolumn behavior only.
It does not control whether Nullable(Tuple(...)) columns can be created in tables; that is controlled by enable_nullable_tuple_type.
ClickHouse uses the value for this setting loaded at server startup.
Changes made with SET or query-level SETTINGS do not change extracted subcolumn behavior.
To change extracted subcolumn behavior, update allow_nullable_tuple_in_extracted_subcolumns in startup profile configuration (for example, users.xml) and restart the server.
allow_preliminary_distinct_abandoning
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.9 | 1 | New setting that lets the preliminary `DISTINCT` give up deduplicating mostly-unique input, because the final `DISTINCT` deduplicates its output again. |
Let the preliminary (per-stream) DISTINCT give up deduplicating mostly-unique input, freeing its hash table and passing the remaining rows through. The preliminary DISTINCT is best-effort by design - duplicates from different streams pass through it even when it deduplicates - and the final DISTINCT deduplicates its output again, so abandoning gives up the removal of almost nothing and saves the memory and hashing of a second copy of the unique keys. Not applied when the preliminary DISTINCT carries a limit hint (a plain LIMIT with no subsequent ordering).
allow_rank_dense_rank_arguments
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.5 | 0 | New setting. Before 26.5, the `RANK` and `DENSE_RANK` window functions silently ignored any provided arguments (equivalent to `allow_rank_dense_rank_arguments = 1`). From 26.5, they reject arguments by default with `NUMBER_OF_ARGUMENTS_DOESNT_MATCH` because per SQL standard these functions take zero arguments. Set this to `1` to restore the legacy behavior. |
Allow passing arguments to the RANK and DENSE_RANK window functions for backward compatibility.
Per SQL standard, RANK and DENSE_RANK take zero arguments — they rank rows based on the
OVER (ORDER BY ...) window only. In ClickHouse versions before 26.5, queries such as
RANK(x) OVER (...) silently accepted and ignored the argument, which led to user confusion
(the visible argument suggested it influenced the ranking, but it did not).
When this setting is false (the default), RANK and DENSE_RANK reject any arguments and
throw NUMBER_OF_ARGUMENTS_DOESNT_MATCH. When set to true, the legacy lenient behavior is
restored — arguments are silently ignored, matching the pre-26.5 behavior.
allow_reorder_prewhere_conditions
Version history
| Version | Default value | Comment |
|---|---|---|
| 24.10 | 1 | New setting |
When moving conditions from WHERE to PREWHERE, allow reordering them to optimize filtering
allow_replace_partition_from_empty_source
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.6 | 0 | New safety check: `ALTER TABLE ... REPLACE PARTITION ... FROM ...` now throws when the source table has no parts in the requested partition (fixes the silent data loss in [#23727](https://github.com/ClickHouse/ClickHouse/issues/23727)). The previous behavior, silently dropping the destination partition, is preserved by setting `allow_replace_partition_from_empty_source = 1`. |
Allow ALTER TABLE ... REPLACE PARTITION ... FROM ... to silently drop the destination partition when the source has no parts in that partition.
By default this is disallowed: REPLACE PARTITION from a source that has no data in the requested partition raises an exception, because in this case the operation effectively becomes a silent DROP PARTITION on the destination (the destination’s data is removed and nothing replaces it), a common cause of accidental data loss (see #23727).
Enable this setting to restore the previous behavior, for example when you intentionally use an empty source partition to clear data in the destination. For an unconditional drop, prefer ALTER TABLE ... DROP PARTITION ... instead.
allow_settings_after_format_in_insert
Version history
| Version | Default value | Comment |
|---|---|---|
| 22.4 | 0 | Do not allow SETTINGS after FORMAT for INSERT queries because ClickHouse interpret SETTINGS as some values, which is misleading |
Control whether SETTINGS after FORMAT in INSERT queries is allowed or not. It is not recommended to use this, since this may interpret part of SETTINGS as values.
Example:
INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar');But the following query will work only with allow_settings_after_format_in_insert:
SET allow_settings_after_format_in_insert=1;
INSERT INTO FUNCTION null('foo String') VALUES ('bar') SETTINGS max_threads=1;Possible values:
- 0 — Disallow.
- 1 — Allow.
allow_simdjson
Allow using simdjson library in ‘JSON*’ functions if AVX2 instructions are available. If disabled rapidjson will be used.
allow_special_serialization_kinds_in_output_formats
Version history
| Version | Default value | Comment |
|---|---|---|
| 25.11 | 1 | Enable direct output of special columns representations like Sparse/Replicated in some output formats |
| 25.10 | 0 | Add a setting to allow output of special columns representations like Sparse/Replicated without converting them to full columns |
Allows to output columns with special serialization kinds like Sparse and Replicated without converting them to full column representation. It helps to avoid unnecessary data copy during formatting.
allow_unrestricted_reads_from_keeper
Allow unrestricted (without condition on path) reads from system.zookeeper table, can be handy, but is not safe for zookeeper
allow_window_partitions_independently
Version history
| Version | Default value | Comment |
|---|---|---|
| 26.8 | 1 | New setting to evaluate window functions per partition independently (skipping the hash scatter) when the partition expression is a deterministic function of the window `PARTITION BY` columns. |
Enable independent evaluation of window functions per partition on separate threads when the partition expression of the MergeTree table is a deterministic function of the window PARTITION BY columns. Each partition is read through a separate stream, sorted independently by the window sort description, and processed by its own window transform, skipping the hash scatter that ordinarily reshuffles every row across threads. Beneficial when the number of partitions is close to the number of cores and partitions have roughly the same size; otherwise a cost heuristic skips it, see max_number_of_partitions_for_independent_window and force_window_partitions_independently. Not applied with FINAL or parallel replicas.