allow_aggregate_partitions_independently
当分区键适合 GROUP BY 键时,启用在独立线程上对各分区分别进行聚合。当分区数量接近 CPU 核心数,且各分区大小大致相同时,此功能最有利。ReadFromMergeTree 中的启发式规则会在布局不理想时 (分区过少、分区过多,或分区大小严重失衡) 自动禁用该优化;如需绕过这些检查,请参见 force_aggregate_partitions_independently。
allow_archive_path_syntax
File/S3 引擎/表函数会将包含 ’::’ 的路径解析为<archive> :: <file>,前提是归档文件具有正确的扩展名。
allow_asynchronous_read_from_io_pool_for_merge_tree
使用后台 I/O 线程池从 MergeTree 表中读取数据。此设置可能会提高受 I/O 限制的查询的性能allow_block_nested_loop_join
允许以块嵌套循环连接的方式执行带有任意ON 条件 (即被连接的表之间不存在等值条件) 的 JOIN。
该算法会逐一检查每一对行,开销为两个表行数的乘积。该运算符是 JOIN 规划的最后手段,仅当所有 join_algorithm 都无法执行该条件时才会启用,因此无法通过该设置来选择它。
禁用此设置后,凡是需要使用该运算符的查询,都会在规划阶段报 INVALID_JOIN_ON_EXPRESSION 错误并被拒绝。
可选值:
- 0 — 拒绝此类查询。
- 1 — 以块嵌套循环连接方式执行 (默认) 。
allow_calculating_subcolumns_sizes_for_merge_tree_reading
启用后,ClickHouse 将计算读取每个子列所需文件的大小,以便更准确地计算任务大小和块大小。allow_changing_replica_until_first_data_packet
如果启用,在对冲请求中,即使已经有了一些进度,也可以在收到第一个数据包之前发起新的连接 (但在receive_data_timeout 超时时间内进度没有更新) ;否则,一旦首次取得进度,就会禁止切换副本。
allow_correlated_subqueries
别名:allow_experimental_correlated_subqueries
允许执行关联子查询。
allow_create_index_without_type
允许执行不带 TYPE 的 CREATE INDEX 查询。该查询会被忽略。此设置用于 SQL 兼容性测试。allow_creating_set_partitions_independently
当子查询的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_database_glue_catalog
别名:allow_experimental_database_glue_catalog
允许使用 catalog_type = 'glue' 的数据库引擎 DataLakeCatalog
Cloud 默认值:1。
allow_database_iceberg
别名:allow_experimental_database_iceberg
允许使用 catalog_type = 'iceberg' 的 数据库引擎 DataLakeCatalog
Cloud 默认值:1。
allow_database_unity_catalog
别名:allow_experimental_database_unity_catalog
允许使用 catalog_type = 'unity' 的 数据库引擎 DataLakeCatalog
Cloud 默认值: 1。
allow_ddl
如果设置为 true,则用户可以执行 DDL 查询。allow_delta_kernel_rs
别名:allow_experimental_delta_kernel_rs
允许使用 delta-kernel-rs 实现读取 Delta Lake 表。
allow_delta_lake_create_table
允许使用 delta-kernel-rs 创建新的 DeltaLake 表,或将已有表注册到 catalog 中。目前尚不支持创建分区表 (PARTITION BY) 。在 DataLakeCatalog 数据库中,表是按其 Delta schema 注册的,因此若声明的 ClickHouse 类型映射到范围更宽的 Delta 类型 (例如 UInt8 -> short、FixedString(N) -> string) ,读取时得到的是 Delta 映射后的类型,而非所声明的类型。
allow_delta_lake_writes
别名:allow_experimental_delta_lake_writes
启用 delta-kernel 写入功能。
allow_distinct_partitions_independently
当分区表达式是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
允许在 JOIN 连接键中使用 Dynamic 类型。此设置是为兼容性而添加的。不建议在 JOIN 连接键中使用 Dynamic 类型,因为与其他类型比较时可能会产生意外结果。allow_executable_tables
允许通过executable 表函数以及从 Executable 和 ExecutablePool 表进行读取。
禁用该设置仅会拒绝读取操作:创建、附加、删除和查看此类表的结构仍然可用。已启动的 ExecutablePool 进程会继续运行,不会被终止,但在重新启用该设置之前,每次读取仍会被拒绝。
allow_execute_multiif_columnar
允许以列式方式执行 multiIf 函数allow_fuzz_query_functions
启用fuzzQuery 函数,该函数会对查询字符串进行随机 AST 变更。
allow_general_join_planning
允许使用一种更通用的 JOIN 规划算法,可处理更复杂的条件,但仅适用于 hash join。如果未启用 hash join,则无论此设置的值如何,都会使用常规的 JOIN 规划算法。allow_geo_types_in_iceberg
别名:allow_experimental_geo_types_in_iceberg
允许将 Iceberg 的 geometry 和 geography 字段类型解析为 ClickHouse 的 Geometry (Variant) 类型。
allow_get_client_http_header
允许使用函数getClientHTTPHeader,该函数可用于获取当前 HTTP 请求的请求头值。出于安全考虑,此功能默认未启用,因为某些请求头 (如 Cookie) 可能包含敏感信息。请注意,X-ClickHouse-*、Authentication 和 Authorization 请求头始终受限,无法通过此函数获取。
allow_hyperscan
允许使用 Hyperscan 库的函数。禁用此设置可避免潜在的编译时间过长以及资源占用过高。allow_iceberg_remove_orphan_files
允许对 Iceberg 表执行 ‘ALTER TABLE … EXECUTE remove_orphan_files()’。allow_insert_into_iceberg
别名:allow_experimental_insert_into_iceberg
允许执行向 Iceberg 插入数据的 insert 查询。
allow_introspection_functions
启用或禁用用于查询性能分析的内部信息函数。 可选值:- 1 — 启用内部信息函数。
- 0 — 禁用内部信息函数。
allow_join_right_table_sorting
别名:allow_experimental_join_right_table_sorting
若设置为 true,且满足 join_to_sort_minimum_perkey_rows 与 join_to_sort_maximum_table_rows 的条件,则按 key 对右表重新排列,以提升 left 或 inner hash join 的性能。
该设置目前仍处于实验阶段,尚不能与其他所有 join 优化配合使用。
具体而言,右表重新排列后,由 joined_block_split_single_row 控制的按 key 拆分将被禁用,因此单个左表行所产生的行数既不受 max_joined_block_size_rows 限制,也不受 max_joined_block_size_bytes 限制。
allow_kafka_offsets_storage_in_keeper
别名:allow_experimental_kafka_offsets_storage_in_keeper
允许将 Kafka 相关的偏移量存储在 ClickHouse Keeper 中。启用后,可为 Kafka table engine 指定 ClickHouse Keeper path 和副本名称。此时将不再使用常规的 Kafka 引擎,而是改用一种新的 storage engine,主要把已提交偏移量存储在 ClickHouse Keeper 中
allow_key_condition_coalesce_rewrite
在索引分析之前,将形如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
当分区表达式是LIMIT BY 列的确定性函数时,启用在独立线程中按分区分别计算 LIMIT BY。
allow_lossy_numeric_supertype
启用后,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
允许 CREATE MATERIALIZED VIEW 使用引用不存在表或列的 SELECT 查询。但该查询在语法上仍必须有效。不适用于 refreshable MV。如果 MV 的 schema 需要从 SELECT 查询中推断,也不适用 (即 CREATE 没有列列表,且没有 TO table) 。可用于在源表创建之前先创建 MV。allow_metadata_only_named_tuple_alter
如果为 true,则对于仅添加新子字段的命名 Tuple,ALTER MODIFY COLUMN 操作仅修改元数据 (不会进行数据变更) 。 设为 false 可强制使用旧的完整变更行为。allow_minmax_index_for_json
允许在 JSON (Object) 列上创建 minmax 跳过索引。默认处于禁用状态,因为 minmax 索引的序列化过程无法处理 JSON 列中可能包含的不同类型的 Field 值。allow_non_metadata_alters
允许执行会修改磁盘上数据 (而不仅是表元数据) 的ALTER 语句。
禁用该设置后,如果针对 MergeTree 家族表的 ALTER DDL 语句会直接或通过调度变更 (参见 system.mutations) 重写磁盘上的数据,该语句将被拒绝,并报错
ALTER_OF_COLUMN_IS_FORBIDDEN。受影响的语句包括:
- 类型变更会导致列被重写的
ALTER TABLE ... MODIFY COLUMN、 针对物理列的ALTER TABLE ... DROP COLUMN或... CLEAR COLUMN、 针对任意列 (包括ALIAS列) 的ALTER TABLE ... RENAME COLUMN、ALTER TABLE ... DROP INDEX、... CLEAR INDEX、... DROP PROJECTION、... CLEAR PROJECTION、... DROP STATISTICS、... CLEAR STATISTICS,以及 启用materialize_ttl_after_modify时的ALTER TABLE ... MODIFY TTL。 - 以重量级变更方式执行的
ALTER TABLE ... UPDATE(即默认的alter_update_mode = 'heavy',以及其他模式回退为重量级变更的所有情况) 、ALTER TABLE ... DELETE WHERE、ALTER TABLE ... MATERIALIZE INDEX、... MATERIALIZE PROJECTION、... MATERIALIZE STATISTICS、... MATERIALIZE COLUMN、... MATERIALIZE TTL(与上文的MODIFY TTL不同,该语句无条件被拒绝) 、... APPLY DELETED MASK、... APPLY PATCHES和... REWRITE PARTS。
ALTER 语句均允许执行,包括 ADD COLUMN、COMMENT COLUMN、
MODIFY SETTING、Enum 扩展,以及针对 ALIAS 列的 DROP COLUMN。
专用的 DELETE FROM ... 和 UPDATE ... SET ... 语句有别于上文的
ALTER TABLE ... DELETE WHERE 和 ALTER TABLE ... UPDATE 命令,无论以其支持的哪种模式执行,该设置都不会拒绝它们。该设置仅约束 ALTER DDL。如需全面限制数据修改,请通过 GRANT 和
REVOKE 管理 ALTER DELETE 和 ALTER UPDATE 特权。但请注意,
这些特权同时涵盖专用语句和 ALTER 命令,因此无法对两者分别加以限制。
该检查仅适用于 MergeTree 家族表。其他引擎 (例如 Memory、
Log、StripeLog、KeeperMap 和 EmbeddedRocksDB) 会忽略该设置。
allow_nonconst_timezone_arguments
允许在某些与时间相关的函数中使用非常量时区参数,例如 toTimeZone()、fromUnixTimestamp*() 和 snowflakeIDToDateTime*()。 此设置仅为兼容性而保留。在 ClickHouse 中,时区是数据类型的属性,也就是列的属性。 启用此设置会给人一种错误的印象,仿佛同一列中的不同值可以具有不同的时区。 因此,请不要启用此设置。allow_nullable_tuple_in_extracted_subcolumns
控制类型为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_preliminary_distinct_abandoning
允许预先 (按流执行的)DISTINCT 在输入数据大多唯一时放弃去重,释放其哈希表并让其余行直接通过。预先 DISTINCT 在设计上是尽力而为的——即使执行去重,不同流中的重复项仍会通过——而最终 DISTINCT 会再次对其输出去重。因此,放弃预先去重几乎不会减少重复项的移除效果,却能节省存储第二份唯一键副本所需的内存和哈希计算。当预先 DISTINCT 带有 limit hint (即后续没有排序的普通 LIMIT) 时,不会应用此设置。
allow_rank_dense_rank_arguments
允许向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
将条件从 WHERE 移至 PREWHERE 时,允许重新排序这些条件,以优化筛选allow_replace_partition_from_empty_source
允许在源表对应分区中没有 parts 时,ALTER TABLE ... REPLACE PARTITION ... FROM ... 静默删除目标端分区。
默认情况下不允许这样做:如果源表在请求的分区中没有数据,那么从该源执行 REPLACE PARTITION 会抛出异常,因为这种情况下,该操作实际上等同于对目标端静默执行 DROP PARTITION (目标端数据会被删除,但不会有任何内容替换它) ,这也是意外数据丢失的常见原因 (参见 #23727) 。
启用此设置可恢复之前的行为,例如当你有意使用空源分区来清空目标端数据时。若要无条件删除,建议直接改用 ALTER TABLE ... DROP PARTITION ...。
allow_settings_after_format_in_insert
控制是否允许在INSERT 查询中于 FORMAT 之后使用 SETTINGS。不建议使用此设置,因为这可能会将 SETTINGS 的一部分解释为值。
示例:
allow_settings_after_format_in_insert 时才能运行:
- 0 — 禁止。
- 1 — 允许。
仅当你的用例依赖旧语法、需要保持向后兼容时,才使用此设置。
allow_simdjson
如果支持 AVX2 指令,则允许在JSON* 函数中使用 simdjson 库。禁用后将使用 rapidjson。
allow_special_serialization_kinds_in_output_formats
允许直接输出具有 Sparse 和 Replicated 等特殊序列化类型的列,而无需将其转换为普通列表示。 这有助于避免格式化过程中不必要的数据复制。allow_unrestricted_reads_from_keeper
允许从 system.zookeeper 表进行不受限制的读取 (即不对 path 作条件限制) 。这可能会比较方便,但对 ZooKeeper 来说并不安全allow_url_wildcard_from_index_pages
别名:allow_experimental_url_wildcard_from_index_pages
允许 url() 和 ENGINE = URL 基于 HTTP 索引页面进行通配符展开。
allow_window_partitions_independently
当MergeTree 表的分区表达式是窗口 PARTITION BY 列的确定性函数时,启用在独立线程上按分区独立计算窗口函数。每个分区通过独立的 stream 读取,按照窗口排序描述分别排序,并由各自的窗口 转换 处理,从而跳过通常会在各线程间重新分发每一行的哈希分散。当分区数接近 CPU 核心数且各分区大小大致相同时,此设置效果较好;否则,成本启发式策略会跳过该优化。参见 max_number_of_partitions_for_independent_window 和 force_window_partitions_independently。不适用于 FINAL 或并行副本。