Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

allow_* 会话设置

这些设置可在 system.settings 中查看,并由 源码 自动生成。

allow_aggregate_partitions_independently

类型
Bool
默认值
1
版本历史
版本默认值注释
26.71当分区键适合 GROUP BY 键时,默认启用按分区独立聚合。`ReadFromMergeTree::requestOutputEachPartitionThroughSeparatePortForAggregation` 中现有的运行时启发式规则会在分区布局不理想时(分区过少、分区过多,或分区大小严重失衡)跳过此优化,因此在原本只会成为空操作的情况下,启用该设置也是安全的。

当分区键适合 GROUP BY 键时,启用在独立线程上对各分区分别进行聚合。当分区数量接近 CPU 核心数,且各分区大小大致相同时,此功能最有利。ReadFromMergeTree 中的启发式规则会在布局不理想时 (分区过少、分区过多,或分区大小严重失衡) 自动禁用该优化;如需绕过这些检查,请参见 force_aggregate_partitions_independently

allow_archive_path_syntax

类型
Bool
默认值
1
版本历史
版本默认值注释
24.81新增设置,可禁用归档路径语法。
24.51新增设置,可禁用归档路径语法。

File/S3 引擎/表函数会将包含 '::' 的路径解析为 <archive> :: <file>,前提是归档文件具有正确的扩展名。

allow_asynchronous_read_from_io_pool_for_merge_tree

类型
Bool
默认值
0

使用后台 I/O 线程池从 MergeTree 表中读取数据。此设置可能会提高受 I/O 限制的查询的性能

allow_calculating_subcolumns_sizes_for_merge_tree_reading

类型
Bool
默认值
1
版本历史
版本默认值注释
26.31允许在读取 MergeTree 时计算子列大小,以优化读取任务拆分

启用后,ClickHouse 将计算读取每个子列所需文件的大小,以便更准确地计算任务大小和块大小。

allow_changing_replica_until_first_data_packet

类型
Bool
默认值
0

如果启用,在对冲请求中,即使已经有了一些进度,也可以在收到第一个数据包之前发起新的连接 (但在 receive_data_timeout 超时时间内进度没有更新) ;否则,一旦首次取得进度,就会禁止切换副本。

allow_create_index_without_type

类型
Bool
默认值
0

允许执行不带 TYPE 的 CREATE INDEX 查询。该查询会被忽略。此设置用于 SQL 兼容性测试。

allow_creating_set_partitions_independently

类型
Bool
默认值
1
版本历史
版本默认值注释
26.81当分区表达式是子查询输出列的确定性函数时,启用在为 `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

类型
Bool
默认值
0

在 throwIf() 函数中启用自定义错误代码。如果为 true,抛出的异常可能带有非预期的错误代码。

allow_ddl

类型
Bool
默认值
1

如果设置为 true,则用户可以执行 DDL 查询。

allow_delta_kernel_rs

Beta 版功能

别名allow_experimental_delta_kernel_rs

类型
Bool
默认值
1
版本历史
版本默认值注释
26.81`allow_experimental_delta_kernel_rs` 的新名称;该设置不再处于实验阶段,原名称保留为别名。默认值保持不变。
25.51新设置。最初以 `allow_experimental_delta_kernel_rs` 之名引入,现为该设置的别名;为保留完整历史记录,此条目以规范名称延续。

允许使用 delta-kernel-rs 实现读取 Delta Lake 表。

allow_distinct_partitions_independently

类型
Bool
默认值
1
版本历史
版本默认值注释
26.81当分区表达式是 `DISTINCT` 列的确定性函数时,新增此设置以启用按分区独立计算 `DISTINCT`。

当分区表达式是 DISTINCT 列的确定性函数时,启用在独立线程中按分区计算 DISTINCT,从而跳过跨流合并。当分区数接近 CPU 核心数且各分区大小大致相同时,此设置会带来收益;否则,成本启发式策略会跳过此优化。请参阅 max_number_of_partitions_for_independent_distinctforce_distinct_partitions_independently。不适用于 FINAL 或并行副本。

设置 max_rows_in_distinctmax_bytes_in_distinct 时,不会应用此设置:这些限制由可见整个合并结果的单个 DISTINCT 转换执行,因此会保留跨流合并,以确保其全局语义。

allow_distributed_ddl

类型
Bool
默认值
1

如果设置为 true,则允许用户执行分布式 DDL 查询。

allow_drop_detached

类型
Bool
默认值
0

允许执行 ALTER TABLE … DROP DETACHED PART[ITION] … 语句

allow_dynamic_type_in_join_keys

类型
Bool
默认值
0
版本历史
版本默认值注释
25.100默认禁止在 JOIN 连接键中使用 Dynamic 类型

允许在 JOIN 连接键中使用 Dynamic 类型。此设置是为兼容性而添加的。不建议在 JOIN 连接键中使用 Dynamic 类型,因为与其他类型比较时可能会产生意外结果。

allow_execute_multiif_columnar

类型
Bool
默认值
1

允许以列式方式执行 multiIf 函数

allow_fuzz_query_functions

Experimental 功能
类型
Bool
默认值
0
版本历史
版本默认值注释
26.20用于启用 fuzzQuery 函数的新设置。

启用 fuzzQuery 函数,该函数会对查询字符串进行随机 AST 变更。

allow_general_join_planning

类型
Bool
默认值
1
版本历史
版本默认值注释
25.11在启用 hash join 算法时,允许使用更通用的 JOIN 规划算法。

允许使用一种更通用的 JOIN 规划算法,可处理更复杂的条件,但仅适用于 hash join。如果未启用 hash join,则无论此设置的值如何,都会使用常规的 JOIN 规划算法。

allow_get_client_http_header

类型
Bool
默认值
0
版本历史
版本默认值注释
24.30新增了一个函数。

允许使用函数 getClientHTTPHeader,该函数可用于获取当前 HTTP 请求的请求头值。出于安全考虑,此功能默认未启用,因为某些请求头 (如 Cookie) 可能包含敏感信息。请注意,X-ClickHouse-*AuthenticationAuthorization 请求头始终受限,无法通过此函数获取。

allow_hyperscan

类型
Bool
默认值
1

允许使用 Hyperscan 库的函数。禁用此设置可避免潜在的编译时间过长以及资源占用过高。

allow_iceberg_remove_orphan_files

Experimental 功能
类型
Bool
默认值
0
版本历史
版本默认值注释
26.40用于控制 Iceberg 孤立文件删除的新设置

允许对 Iceberg 表执行 'ALTER TABLE … EXECUTE remove_orphan_files()'。

allow_insert_into_iceberg

Beta 版功能

别名: allow_experimental_insert_into_iceberg

类型
Bool
默认值
0
版本历史
版本默认值注释
26.20向 Iceberg 插入已调整为 Beta
25.70新设置。

允许执行向 Iceberg 插入数据的 insert 查询。

allow_introspection_functions

类型
Bool
默认值
0

启用或禁用用于查询性能分析的内部信息函数

可选值:

  • 1 — 启用内部信息函数。
  • 0 — 禁用内部信息函数。

另请参阅

allow_key_condition_coalesce_rewrite

类型
Bool
默认值
1
版本历史
版本默认值注释
26.51新增设置:在索引分析之前,将形如 `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

类型
Bool
默认值
1
版本历史
版本默认值注释
26.61新增设置:当分区表达式是 `LIMIT BY` 列的确定性函数时,启用按分区独立计算 `LIMIT BY`。

当分区表达式是 LIMIT BY 列的确定性函数时,启用在独立线程中按分区分别计算 LIMIT BY

allow_lossy_numeric_supertype

类型
Bool
默认值
0
版本历史
版本默认值注释
26.80新增设置:允许 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 在处理一组不存在无损公共类型的数值参数时 (例如 DecimalFloat64,或 Int64Float64) ,会将其解析为数值超类型 (Float64) ,而非报错,但可能损失精度。这样,结果便可直接用于 sumavgminmax 等合并值的聚合函数。此设置独立于 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

类型
Bool
默认值
0
版本历史
版本默认值注释
25.40不允许创建引用不存在列或表的 MV
24.91支持(但尚未启用)在 CREATE MATERIALIZED VIEW 中进行更严格的验证

允许 CREATE MATERIALIZED VIEW 使用引用不存在表或列的 SELECT 查询。但该查询在语法上仍必须有效。不适用于 refreshable MV。如果 MV 的 schema 需要从 SELECT 查询中推断,也不适用 (即 CREATE 没有列列表,且没有 TO table) 。可用于在源表创建之前先创建 MV。

allow_metadata_only_named_tuple_alter

类型
Bool
默认值
0
版本历史
版本默认值注释
26.80新增设置,用于控制向命名 Tuple 子字段添加字段时是否仅修改元数据。

如果为 true,则对于仅添加新子字段的命名 Tuple,ALTER MODIFY COLUMN 操作仅修改元数据 (不会进行数据变更) 。 设为 false 可强制使用旧的完整变更行为。

allow_minmax_index_for_json

类型
Bool
默认值
0
版本历史
版本默认值注释
26.70默认禁止在 JSON 列上创建 minmax 跳过索引,因为索引序列化无法处理不同类型的 Field 值

允许在 JSON (Object) 列上创建 minmax 跳过索引。默认处于禁用状态,因为 minmax 索引的序列化过程无法处理 JSON 列中可能包含的不同类型的 Field 值。

allow_named_collection_override_by_default

类型
Bool
默认值
1

默认允许覆盖命名集合中的字段。

allow_non_metadata_alters

类型
Bool
默认值
1

允许执行不仅会影响表元数据,还会影响磁盘上数据的 alter 操作

allow_nonconst_timezone_arguments

类型
Bool
默认值
0
版本历史
版本默认值注释
23.40允许在某些与时间相关的函数中使用非常量时区参数,例如 toTimeZone()、fromUnixTimestamp*() 和 snowflakeToDateTime*()。

允许在某些与时间相关的函数中使用非常量时区参数,例如 toTimeZone()、fromUnixTimestamp*() 和 snowflakeIDToDateTime*()。 此设置仅为兼容性而保留。在 ClickHouse 中,时区是数据类型的属性,也就是列的属性。 启用此设置会给人一种错误的印象,仿佛同一列中的不同值可以具有不同的时区。 因此,请不要启用此设置。

allow_nullable_tuple_in_extracted_subcolumns

类型
Bool
默认值
0
版本历史
版本默认值注释
26.30用于控制提取的 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

类型
Bool
默认值
0
版本历史
版本默认值注释
26.50新设置。在 26.5 之前,`RANK` 和 `DENSE_RANK` 窗口函数会静默忽略任何传入参数(等同于 `allow_rank_dense_rank_arguments = 1`)。从 26.5 开始,它们默认会因 `NUMBER_OF_ARGUMENTS_DOESNT_MATCH` 而拒绝参数,因为根据 SQL 标准,这些函数不接受任何参数。将此项设为 `1` 可恢复旧版行为。

允许向 RANKDENSE_RANK 窗口函数传递参数,以保持向后兼容。

根据 SQL 标准,RANKDENSE_RANK 不接受任何参数——它们仅根据 OVER (ORDER BY ...) 窗口对行进行排名。在 26.5 之前的 ClickHouse 版本中,类似 RANK(x) OVER (...) 的查询会静默接受并忽略该参数,这会导致用户困惑 (显式写出的参数看起来似乎会影响排名,但实际上并不会) 。

当此设置为 false (默认值) 时,RANKDENSE_RANK 会拒绝任何参数,并 抛出 NUMBER_OF_ARGUMENTS_DOESNT_MATCH。当设为 true 时,将恢复旧版的宽松行为—— 参数会被静默忽略,与 26.5 之前的行为一致。

allow_reorder_prewhere_conditions

类型
Bool
默认值
1
版本历史
版本默认值注释
24.101新设置

将条件从 WHERE 移至 PREWHERE 时,允许重新排序这些条件,以优化筛选

allow_replace_partition_from_empty_source

类型
Bool
默认值
0
版本历史
版本默认值注释
26.60新增安全检查:如果源表在请求的分区中没有 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

类型
Bool
默认值
0
版本历史
版本默认值注释
22.40不允许在 `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

类型
Bool
默认值
1

如果支持 AVX2 指令,则允许在 JSON* 函数中使用 simdjson 库。禁用后将使用 rapidjson。

allow_special_serialization_kinds_in_output_formats

类型
Bool
默认值
1
版本历史
版本默认值注释
25.111在某些输出格式中启用直接输出 Sparse/Replicated 等特殊列表示
25.100新增一个设置,允许输出 Sparse/Replicated 等特殊列表示,而不将其转换为普通列

允许直接输出具有 Sparse 和 Replicated 等特殊序列化类型的列,而无需将其转换为普通列表示。 这有助于避免格式化过程中不必要的数据复制。

allow_unrestricted_reads_from_keeper

类型
Bool
默认值
0

允许从 system.zookeeper 表进行不受限制的读取 (即不对 path 作条件限制) 。这可能会比较方便,但对 ZooKeeper 来说并不安全

allow_window_partitions_independently

类型
Bool
默认值
1
版本历史
版本默认值注释
26.81新增设置:当分区表达式是窗口 `PARTITION BY` 列的确定性函数时,可按分区独立计算窗口函数(跳过哈希分散)。

MergeTree 表的分区表达式是窗口 PARTITION BY 列的确定性函数时,启用在独立线程上按分区独立计算窗口函数。每个分区通过独立的 stream 读取,按照窗口排序描述分别排序,并由各自的窗口 转换 处理,从而跳过通常会在各线程间重新分发每一行的哈希分散。当分区数接近 CPU 核心数且各分区大小大致相同时,此设置效果较好;否则,成本启发式策略会跳过该优化。参见 max_number_of_partitions_for_independent_windowforce_window_partitions_independently。不适用于 FINAL 或并行副本。

Navigation