这些设置可在 system.settings 中查看,并由 源码 自动生成。
allow_aggregate_partitions_independently
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.7 | 1 | 当分区键适合 GROUP BY 键时,默认启用按分区独立聚合。`ReadFromMergeTree::requestOutputEachPartitionThroughSeparatePortForAggregation` 中现有的运行时启发式规则会在分区布局不理想时(分区过少、分区过多,或分区大小严重失衡)跳过此优化,因此在原本只会成为空操作的情况下,启用该设置也是安全的。 |
当分区键适合 GROUP BY 键时,启用在独立线程上对各分区分别进行聚合。当分区数量接近 CPU 核心数,且各分区大小大致相同时,此功能最有利。ReadFromMergeTree 中的启发式规则会在布局不理想时 (分区过少、分区过多,或分区大小严重失衡) 自动禁用该优化;如需绕过这些检查,请参见 force_aggregate_partitions_independently。
allow_archive_path_syntax
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.8 | 1 | 新增设置,可禁用归档路径语法。 |
| 24.5 | 1 | 新增设置,可禁用归档路径语法。 |
File/S3 引擎/表函数会将包含 '::' 的路径解析为 <archive> :: <file>,前提是归档文件具有正确的扩展名。
allow_asynchronous_read_from_io_pool_for_merge_tree
使用后台 I/O 线程池从 MergeTree 表中读取数据。此设置可能会提高受 I/O 限制的查询的性能
allow_calculating_subcolumns_sizes_for_merge_tree_reading
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.3 | 1 | 允许在读取 MergeTree 时计算子列大小,以优化读取任务拆分 |
启用后,ClickHouse 将计算读取每个子列所需文件的大小,以便更准确地计算任务大小和块大小。
allow_changing_replica_until_first_data_packet
如果启用,在对冲请求中,即使已经有了一些进度,也可以在收到第一个数据包之前发起新的连接
(但在 receive_data_timeout 超时时间内进度没有更新) ;否则,一旦首次取得进度,就会禁止切换副本。
allow_create_index_without_type
允许执行不带 TYPE 的 CREATE INDEX 查询。该查询会被忽略。此设置用于 SQL 兼容性测试。
allow_creating_set_partitions_independently
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 当分区表达式是子查询输出列的确定性函数时,启用在为 `IN (subquery)` 构建 Set 期间对其结果按分区并行预去重的新设置。 |
当子查询的 MergeTree 表的分区表达式是子查询输出列的确定性函数时,启用在为 IN (subquery) 构建 Set 期间对该子查询结果按分区并行预去重。每个分区通过独立的 stream 读取并单独去重,因此唯一的 Set 填充转换仅会对唯一行计算哈希。此优化不适用于 FINAL、并行副本或 GLOBAL IN。仅当数据包含多个分区,且最大分区的行数不超过平均分区行数的两倍时,才会请求按分区读取 (参阅 force_creating_set_partitions_independently 以跳过数据倾斜检查) ;如果流已因其他按分区功能而被拆分,因而彼此不包含重叠分区 (例如按分区的 LIMIT BY) ,则无论如何都会执行预去重,因为读取布局已确定。构建 Set 期间,各 stream 的去重表合计会额外存储约一份唯一键副本。
allow_custom_error_code_in_throwif
在 throwIf() 函数中启用自定义错误代码。如果为 true,抛出的异常可能带有非预期的错误代码。
allow_ddl
如果设置为 true,则用户可以执行 DDL 查询。
allow_delta_kernel_rs
别名:allow_experimental_delta_kernel_rs
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | `allow_experimental_delta_kernel_rs` 的新名称;该设置不再处于实验阶段,原名称保留为别名。默认值保持不变。 |
| 25.5 | 1 | 新设置。最初以 `allow_experimental_delta_kernel_rs` 之名引入,现为该设置的别名;为保留完整历史记录,此条目以规范名称延续。 |
允许使用 delta-kernel-rs 实现读取 Delta Lake 表。
allow_distinct_partitions_independently
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 当分区表达式是 `DISTINCT` 列的确定性函数时,新增此设置以启用按分区独立计算 `DISTINCT`。 |
当分区表达式是 DISTINCT 列的确定性函数时,启用在独立线程中按分区计算 DISTINCT,从而跳过跨流合并。当分区数接近 CPU 核心数且各分区大小大致相同时,此设置会带来收益;否则,成本启发式策略会跳过此优化。请参阅 max_number_of_partitions_for_independent_distinct 和 force_distinct_partitions_independently。不适用于 FINAL 或并行副本。
设置 max_rows_in_distinct 或 max_bytes_in_distinct 时,不会应用此设置:这些限制由可见整个合并结果的单个 DISTINCT 转换执行,因此会保留跨流合并,以确保其全局语义。
allow_distributed_ddl
如果设置为 true,则允许用户执行分布式 DDL 查询。
allow_drop_detached
允许执行 ALTER TABLE … DROP DETACHED PART[ITION] … 语句
allow_dynamic_type_in_join_keys
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.10 | 0 | 默认禁止在 JOIN 连接键中使用 Dynamic 类型 |
允许在 JOIN 连接键中使用 Dynamic 类型。此设置是为兼容性而添加的。不建议在 JOIN 连接键中使用 Dynamic 类型,因为与其他类型比较时可能会产生意外结果。
allow_execute_multiif_columnar
允许以列式方式执行 multiIf 函数
allow_fuzz_query_functions
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.2 | 0 | 用于启用 fuzzQuery 函数的新设置。 |
启用 fuzzQuery 函数,该函数会对查询字符串进行随机 AST 变更。
allow_general_join_planning
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.1 | 1 | 在启用 hash join 算法时,允许使用更通用的 JOIN 规划算法。 |
允许使用一种更通用的 JOIN 规划算法,可处理更复杂的条件,但仅适用于 hash join。如果未启用 hash join,则无论此设置的值如何,都会使用常规的 JOIN 规划算法。
allow_get_client_http_header
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.3 | 0 | 新增了一个函数。 |
允许使用函数 getClientHTTPHeader,该函数可用于获取当前 HTTP 请求的请求头值。出于安全考虑,此功能默认未启用,因为某些请求头 (如 Cookie) 可能包含敏感信息。请注意,X-ClickHouse-*、Authentication 和 Authorization 请求头始终受限,无法通过此函数获取。
allow_hyperscan
允许使用 Hyperscan 库的函数。禁用此设置可避免潜在的编译时间过长以及资源占用过高。
allow_iceberg_remove_orphan_files
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.4 | 0 | 用于控制 Iceberg 孤立文件删除的新设置 |
允许对 Iceberg 表执行 'ALTER TABLE … EXECUTE remove_orphan_files()'。
allow_insert_into_iceberg
别名: allow_experimental_insert_into_iceberg
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.2 | 0 | 向 Iceberg 插入已调整为 Beta |
| 25.7 | 0 | 新设置。 |
允许执行向 Iceberg 插入数据的 insert 查询。
allow_introspection_functions
启用或禁用用于查询性能分析的内部信息函数。
可选值:
- 1 — 启用内部信息函数。
- 0 — 禁用内部信息函数。
另请参阅
allow_key_condition_coalesce_rewrite
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.5 | 1 | 新增设置:在索引分析之前,将形如 `coalesce(a_1, ..., a_N) <op> const` 的谓词(以及等价的 `ifNull` 形式,或常量在左侧的情况)重写为析取形式,从而可以使用每个 `a_i` 上的按列主键和跳过索引。还支持部分常量形式,例如 `coalesce(a, 42, b)` 和 `coalesce(a, b, 42)`。 |
在索引分析之前,将形如 coalesce(a_1, ..., a_N) <op> const 的谓词 (以及等价的 ifNull 形式,或常量在左侧的情况) 重写为析取形式 (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),从而可以使用每个 a_i 上的按列主键和跳过索引。支持部分常量形式,例如 coalesce(a, 42, b) 和 coalesce(a, b, 42):参数列表会像 coalesce 本身一样进行归一化 (丢弃 NULL 字面量,以及第一个非 Nullable 参数之后的参数) ;如果末尾存在非 NULL 常量,则会将其作为最终分支输出。此重写仅用于增强索引裁剪;运行时过滤仍使用原始谓词。
此外,形如 nullIf(key, sentinel) = const 的精确相等谓词 (其中 sentinel != const 且类型完全匹配) 会被重写为 key = const,以便 key 上的主键、分区和跳过索引可以直接裁剪粒度。不支持对范围条件和析取式 nullIf 进行裁剪。
allow_limit_by_partitions_independently
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 1 | 新增设置:当分区表达式是 `LIMIT BY` 列的确定性函数时,启用按分区独立计算 `LIMIT BY`。 |
当分区表达式是 LIMIT BY 列的确定性函数时,启用在独立线程中按分区分别计算 LIMIT BY。
allow_lossy_numeric_supertype
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 0 | 新增设置:允许 if/multiIf/coalesce/ifNull/array/map 在所有数值分支不存在无损公共类型时(例如 Decimal + Float64),将其解析为数值超类型(Float64,可能损失精度),从而使结果能够聚合。此设置独立于 use_variant_as_common_type:关闭时,此类分支此前会引发 NO_COMMON_TYPE;开启时则会成为 Variant;现在无论哪种情况,都会解析为 Float64。 |
启用后,if/multiIf/coalesce/ifNull/array/map 在处理一组不存在无损公共类型的数值参数时 (例如 Decimal 与 Float64,或 Int64 与 Float64) ,会将其解析为数值超类型 (Float64) ,而非报错,但可能损失精度。这样,结果便可直接用于 sum、avg、min 和 max 等合并值的聚合函数。此设置独立于 use_variant_as_common_type:无论是否启用 use_variant_as_common_type,都会生成数值超类型。禁用时 (默认) ,此类参数集没有公共类型,因此若启用了 use_variant_as_common_type,会成为 Variant;否则会引发 NO_COMMON_TYPE。
allow_materialized_view_with_bad_select
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 0 | 不允许创建引用不存在列或表的 MV |
| 24.9 | 1 | 支持(但尚未启用)在 CREATE MATERIALIZED VIEW 中进行更严格的验证 |
允许 CREATE MATERIALIZED VIEW 使用引用不存在表或列的 SELECT 查询。但该查询在语法上仍必须有效。不适用于 refreshable MV。如果 MV 的 schema 需要从 SELECT 查询中推断,也不适用 (即 CREATE 没有列列表,且没有 TO table) 。可用于在源表创建之前先创建 MV。
allow_metadata_only_named_tuple_alter
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 0 | 新增设置,用于控制向命名 Tuple 子字段添加字段时是否仅修改元数据。 |
如果为 true,则对于仅添加新子字段的命名 Tuple,ALTER MODIFY COLUMN 操作仅修改元数据 (不会进行数据变更) 。 设为 false 可强制使用旧的完整变更行为。
allow_minmax_index_for_json
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.7 | 0 | 默认禁止在 JSON 列上创建 minmax 跳过索引,因为索引序列化无法处理不同类型的 Field 值 |
允许在 JSON (Object) 列上创建 minmax 跳过索引。默认处于禁用状态,因为 minmax 索引的序列化过程无法处理 JSON 列中可能包含的不同类型的 Field 值。
allow_named_collection_override_by_default
默认允许覆盖命名集合中的字段。
allow_non_metadata_alters
允许执行不仅会影响表元数据,还会影响磁盘上数据的 alter 操作
allow_nonconst_timezone_arguments
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 23.4 | 0 | 允许在某些与时间相关的函数中使用非常量时区参数,例如 toTimeZone()、fromUnixTimestamp*() 和 snowflakeToDateTime*()。 |
允许在某些与时间相关的函数中使用非常量时区参数,例如 toTimeZone()、fromUnixTimestamp*() 和 snowflakeIDToDateTime*()。 此设置仅为兼容性而保留。在 ClickHouse 中,时区是数据类型的属性,也就是列的属性。 启用此设置会给人一种错误的印象,仿佛同一列中的不同值可以具有不同的时区。 因此,请不要启用此设置。
allow_nullable_tuple_in_extracted_subcolumns
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.3 | 0 | 用于控制提取的 Tuple 子列是否可以为可空类型的新设置。 |
控制类型为 Tuple(...) 的提取子列是否可以设为 Nullable(Tuple(...)) 类型。
false:返回Tuple(...),并对缺少该子列的行使用默认 Tuple 值。true:返回Nullable(Tuple(...)),并对缺少该子列的行使用NULL。
此设置仅控制提取子列的行为。
它不控制是否可以在表中创建 Nullable(Tuple(...)) 列;这一点由 enable_nullable_tuple_type 控制。
ClickHouse 使用服务器启动时加载的此设置值。
通过 SET 或查询级 SETTINGS 所做的更改不会改变提取子列的行为。
要更改提取子列的行为,请在启动 profile 配置 (例如 users.xml) 中更新 allow_nullable_tuple_in_extracted_subcolumns,然后重启服务器。
allow_rank_dense_rank_arguments
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.5 | 0 | 新设置。在 26.5 之前,`RANK` 和 `DENSE_RANK` 窗口函数会静默忽略任何传入参数(等同于 `allow_rank_dense_rank_arguments = 1`)。从 26.5 开始,它们默认会因 `NUMBER_OF_ARGUMENTS_DOESNT_MATCH` 而拒绝参数,因为根据 SQL 标准,这些函数不接受任何参数。将此项设为 `1` 可恢复旧版行为。 |
允许向 RANK 和 DENSE_RANK 窗口函数传递参数,以保持向后兼容。
根据 SQL 标准,RANK 和 DENSE_RANK 不接受任何参数——它们仅根据
OVER (ORDER BY ...) 窗口对行进行排名。在 26.5 之前的 ClickHouse 版本中,类似
RANK(x) OVER (...) 的查询会静默接受并忽略该参数,这会导致用户困惑
(显式写出的参数看起来似乎会影响排名,但实际上并不会) 。
当此设置为 false (默认值) 时,RANK 和 DENSE_RANK 会拒绝任何参数,并
抛出 NUMBER_OF_ARGUMENTS_DOESNT_MATCH。当设为 true 时,将恢复旧版的宽松行为——
参数会被静默忽略,与 26.5 之前的行为一致。
allow_reorder_prewhere_conditions
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.10 | 1 | 新设置 |
将条件从 WHERE 移至 PREWHERE 时,允许重新排序这些条件,以优化筛选
allow_replace_partition_from_empty_source
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 0 | 新增安全检查:如果源表在请求的分区中没有 parts,`ALTER TABLE ... REPLACE PARTITION ... FROM ...` 现在会抛出异常(修复了 [#23727](https://github.com/ClickHouse/ClickHouse/issues/23727) 中静默数据丢失的问题)。将 `allow_replace_partition_from_empty_source = 1` 可保留之前的行为,即静默删除目标端分区。 |
允许在源表对应分区中没有 parts 时,ALTER TABLE ... REPLACE PARTITION ... FROM ... 静默删除目标端分区。
默认情况下不允许这样做:如果源表在请求的分区中没有数据,那么从该源执行 REPLACE PARTITION 会抛出异常,因为这种情况下,该操作实际上等同于对目标端静默执行 DROP PARTITION (目标端数据会被删除,但不会有任何内容替换它) ,这也是意外数据丢失的常见原因 (参见 #23727) 。
启用此设置可恢复之前的行为,例如当你有意使用空源分区来清空目标端数据时。若要无条件删除,建议直接改用 ALTER TABLE ... DROP PARTITION ...。
allow_settings_after_format_in_insert
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 22.4 | 0 | 不允许在 `INSERT` 查询中于 `FORMAT` 之后使用 `SETTINGS`,因为 ClickHouse 会将 `SETTINGS` 解释为某些值,容易造成误解 |
控制是否允许在 INSERT 查询中于 FORMAT 之后使用 SETTINGS。不建议使用此设置,因为这可能会将 SETTINGS 的一部分解释为值。
示例:
INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar');但以下查询只有在启用 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;可能的值:
- 0 — 禁止。
- 1 — 允许。
allow_simdjson
如果支持 AVX2 指令,则允许在 JSON* 函数中使用 simdjson 库。禁用后将使用 rapidjson。
allow_special_serialization_kinds_in_output_formats
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.11 | 1 | 在某些输出格式中启用直接输出 Sparse/Replicated 等特殊列表示 |
| 25.10 | 0 | 新增一个设置,允许输出 Sparse/Replicated 等特殊列表示,而不将其转换为普通列 |
允许直接输出具有 Sparse 和 Replicated 等特殊序列化类型的列,而无需将其转换为普通列表示。 这有助于避免格式化过程中不必要的数据复制。
allow_unrestricted_reads_from_keeper
允许从 system.zookeeper 表进行不受限制的读取 (即不对 path 作条件限制) 。这可能会比较方便,但对 ZooKeeper 来说并不安全
allow_window_partitions_independently
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 新增设置:当分区表达式是窗口 `PARTITION BY` 列的确定性函数时,可按分区独立计算窗口函数(跳过哈希分散)。 |
当 MergeTree 表的分区表达式是窗口 PARTITION BY 列的确定性函数时,启用在独立线程上按分区独立计算窗口函数。每个分区通过独立的 stream 读取,按照窗口排序描述分别排序,并由各自的窗口 转换 处理,从而跳过通常会在各线程间重新分发每一行的哈希分散。当分区数接近 CPU 核心数且各分区大小大致相同时,此设置效果较好;否则,成本启发式策略会跳过该优化。参见 max_number_of_partitions_for_independent_window 和 force_window_partitions_independently。不适用于 FINAL 或并行副本。