add_http_cors_header
additional_result_filter
SELECT 查询结果的附加过滤表达式。
此设置不适用于任何子查询。
示例
additional_table_filters
aggregate_function_input_format
state— 包含序列化状态的二进制字符串 (默认值) 。这是默认行为,此时 AggregateFunction 值应以二进制数据形式提供。value— 该格式要求提供聚合函数参数的单个值;如果有多个参数,则提供由这些值组成的 Tuple。它们将使用相应的 IDataType 或 DataTypeTuple 进行反序列化,然后聚合形成状态。array— 该格式要求提供一个值的 Array,如上文value选项所述。数组中的所有元素都会被聚合形成状态。
aggregate_function_input_format = 'value' 时:
aggregate_function_input_format = 'array' 时:
value 和 array 格式比默认的 state 格式更慢,因为它们需要在插入时创建并聚合值。
aggregate_functions_null_for_empty
- 0 — 已禁用。
- 1 — 已启用。
aggregate_functions_null_for_empty = 0 时,结果为:
aggregate_functions_null_for_empty = 1 时,结果如下:
aggregation_in_order_max_block_bytes
aggregation_memory_efficient_merge_threads
max_threads 相同。
ai_function_max_api_calls_per_query
ai_function_max_input_tokens_per_query
ai_function_max_output_tokens_per_query
ai_function_max_retries
ai_function_retry_initial_delay_ms 开始。
ai_function_request_timeout_sec
ai_function_max_retries 进行重试。
ai_function_retry_initial_delay_ms
ai_function_throw_on_error
ai_function_throw_on_quota_exceeded
ai_function_max_input_tokens_per_query、ai_function_max_output_tokens_per_query 或 ai_function_max_api_calls_per_query) 时,查询将因异常而中止。如果为 false,则其余行将使用该列类型的默认值 (String 类型为空字符串) 。
allow_aggregate_partitions_independently
allow_archive_path_syntax
<archive> :: <file>。
allow_asynchronous_read_from_io_pool_for_merge_tree
allow_calculating_subcolumns_sizes_for_merge_tree_reading
allow_changing_replica_until_first_data_packet
receive_data_timeout 超时内,Progress 没有更新) ;否则,在第一次取得 Progress 后,就会禁止切换副本。
allow_create_index_without_type
allow_custom_error_code_in_throwif
allow_ddl
allow_deprecated_database_ordinary
allow_deprecated_error_prone_window_functions
allow_deprecated_snowflake_conversion_functions
snowflakeToDateTime、snowflakeToDateTime64、dateTimeToSnowflake 和 dateTime64ToSnowflake 已废弃,且默认处于禁用状态。
请改用 snowflakeIDToDateTime、snowflakeIDToDateTime64、dateTimeToSnowflakeID 和 dateTime64ToSnowflakeID 函数。
如需重新启用这些已废弃的函数 (例如在过渡期间) ,请将此设置设为 true。
allow_deprecated_syntax_for_merge_tree
allow_distributed_ddl
allow_drop_detached
allow_dynamic_type_in_join_keys
allow_execute_multiif_columnar
allow_experimental_ai_functions
aiGenerateContent) 。这些函数会向 AI 提供商发起外部 HTTP 调用。
allow_experimental_analyzer
enable_analyzer
允许启用新的查询分析器。
allow_experimental_cleanup_old_data_files_compaction
allow_experimental_codecs
allow_experimental_database_glue_catalog
allow_database_glue_catalog
允许使用 catalog_type = 'glue' 的实验性数据库引擎 DataLakeCatalog
Cloud 默认值:1。
allow_experimental_database_hms_catalog
allow_experimental_database_iceberg
allow_database_iceberg
允许使用 catalog_type = 'iceberg' 的实验性数据库引擎 DataLakeCatalog
Cloud 默认值:1。
allow_experimental_database_materialized_postgresql
allow_experimental_database_paimon_rest_catalog
catalog_type = 'paimon_rest' 的 Experimental 数据库引擎 DataLakeCatalog
allow_experimental_database_unity_catalog
allow_database_unity_catalog
允许实验性数据库引擎 DataLakeCatalog 使用 catalog_type = ‘unity’
Cloud 默认值:1。
allow_experimental_delta_kernel_rs
allow_experimental_delta_lake_writes
allow_experimental_expire_snapshots
ALTER TABLE ... EXECUTE expire_snapshots。
allow_experimental_funnel_functions
allow_experimental_geo_types_in_iceberg
geometry 和 geography 字段类型解析为 ClickHouse Geometry (Variant) 类型。
allow_experimental_hash_functions
allow_experimental_iceberg_compaction
allow_experimental_join_right_table_sorting
join_to_sort_minimum_perkey_rows 和 join_to_sort_maximum_table_rows 的条件,则按键对右表重新排序,以提升 left 或 inner hash join 的性能。
allow_experimental_json_lazy_type_hints
allow_experimental_kafka_offsets_storage_in_keeper
allow_experimental_kusto_dialect
allow_experimental_materialized_postgresql_table
allow_experimental_nlp_functions
allow_experimental_nullable_tuple_type
Nullable (例如从 Dynamic、Variant、JSON 或 Tuple 列中提取出的子列) 。
如需控制提取出的 Tuple 子列是否可以为 Nullable,请使用 allow_nullable_tuple_in_extracted_subcolumns。
allow_experimental_object_storage_queue_hive_partitioning
allow_experimental_paimon_storage_engine
allow_experimental_parallel_reading_from_replicas
enable_parallel_replicas
执行 SELECT 查询时,每个分片最多可使用 max_parallel_replicas 个副本。读取会并行执行,并进行动态协调。0 - 禁用,1 - 启用,若发生故障则静默禁用,2 - 启用,若发生故障则抛出异常
allow_experimental_polyglot_dialect
allow_experimental_prql_dialect
allow_experimental_query_deduplication
allow_experimental_time_series_aggregate_functions
allow_experimental_ts_to_grid_aggregate_function
用于 Prometheus 风格的时间序列重采样、rate 和 delta 计算的实验性 timeSeries* 聚合函数。
allow_experimental_time_series_table
- 0 — TimeSeries 表引擎已禁用。
- 1 — TimeSeries 表引擎已启用。
allow_experimental_unique_key
UNIQUE KEY 子句的表。
allow_experimental_window_view
allow_experimental_ytsaurus_dictionary_source
allow_experimental_ytsaurus_table_engine
allow_experimental_ytsaurus_table_function
allow_fuzz_query_functions
fuzzQuery 函数,该函数会对查询字符串的 AST 随机执行变更。
allow_general_join_planning
allow_get_client_http_header
getClientHTTPHeader 函数,该函数可获取当前 HTTP 请求的请求头值。出于安全考虑,此功能默认未启用,因为某些请求头 (例如 Cookie) 可能包含敏感信息。请注意,X-ClickHouse-* 和 Authentication 请求头始终受限,无法通过此函数获取。
allow_hyperscan
allow_iceberg_remove_orphan_files
ALTER TABLE ... EXECUTE remove_orphan_files()。
allow_insert_into_iceberg
allow_experimental_insert_into_iceberg
允许向 Iceberg 执行 insert 查询。
allow_introspection_functions
- 1 — 已启用内部信息函数。
- 0 — 已禁用内部信息函数。
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 常量,则将其作为最后一个分支输出。该重写仅用于增强索引剪枝;运行时过滤仍使用原始谓词。
allow_materialized_view_with_bad_select
allow_named_collection_override_by_default
allow_non_metadata_alters
allow_nonconst_timezone_arguments
allow_nondeterministic_mutations
dictGet) 的用户级设置。
例如,字典在各节点之间可能存在不同步的情况,因此默认不允许复制表上的变更从字典中获取值。启用此设置后将允许这种行为,但用户需自行确保所使用的数据在所有节点之间保持同步。
示例
allow_nondeterministic_optimize_skip_unused_shards
rand 或 dictGet;后者在更新时有一些注意事项) 。
可能的值:
- 0 — 不允许。
- 1 — 允许。
allow_nullable_tuple_in_extracted_subcolumns
Tuple(...) 的提取子列是否可以具有 Nullable(Tuple(...)) 类型。
false:返回Tuple(...),并对缺失该子列的行使用默认 Tuple 值。true:返回Nullable(Tuple(...)),并对缺失该子列的行使用NULL。
Nullable(Tuple(...)) 列;这一点由 allow_experimental_nullable_tuple_type 控制。
ClickHouse 使用服务器启动时为此设置加载的值。
通过 SET 或查询级 SETTINGS 所做的更改不会改变提取子列的行为。
若要更改提取子列的行为,请在启动时加载的 profile 配置 (例如 users.xml) 中更新 allow_nullable_tuple_in_extracted_subcolumns,然后重启服务器。
allow_prefetched_read_pool_for_local_filesystem
allow_prefetched_read_pool_for_remote_filesystem
allow_push_predicate_ast_for_distributed_subqueries
allow_push_predicate_when_subquery_contains_with
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
allow_settings_after_format_in_insert
INSERT 查询中于 FORMAT 之后使用 SETTINGS。不建议使用此设置,因为这可能会将 SETTINGS 的一部分解释为值。
示例:
allow_settings_after_format_in_insert 时才能正常工作:
- 0 — 不允许。
- 1 — 允许。
仅当您的使用场景依赖旧语法、需要向后兼容时,才使用此设置。
allow_simdjson
allow_special_serialization_kinds_in_output_formats
allow_statistics
allow_experimental_statistics
允许为列定义统计信息,并管理统计信息。
allow_statistics_optimize
allow_statistic_optimize
允许使用统计信息优化查询
allow_suspicious_codecs
allow_suspicious_fixed_string_types
allow_suspicious_indices
allow_suspicious_low_cardinality_types
FixedString(8_bytes_or_less)。
对于较小的固定值,使用 LowCardinality 通常效率不高,因为 ClickHouse 会为每一行存储一个数值索引。因此:
- 磁盘空间占用可能增加。
- RAM 占用可能更高,具体取决于字典大小。
- 由于额外的编码/解码操作,某些函数的执行速度可能变慢。
- 1 — 不限制使用
LowCardinality。 - 0 — 限制使用
LowCardinality。
allow_suspicious_primary_key
PRIMARY KEY/ORDER BY (即 SimpleAggregateFunction) 。
allow_suspicious_ttl_expressions
allow_suspicious_types_in_group_by
allow_suspicious_types_in_order_by
allow_suspicious_variant_types
allow_unrestricted_reads_from_keeper
alter_move_to_space_execute_async
alter_partition_verbose_result
- 0 — 禁用详细输出。
- 1 — 启用详细输出。
alter_sync
replication_alter_partitions_sync
用于指定由 ALTER、OPTIMIZE 或 TRUNCATE 查询触发、需在副本上执行的操作的等待行为。
可能的值:
0— 不等待。1— 等待本副本执行完成。2— 等待所有副本执行完成。3- 仅等待活跃副本。
0。
alter_sync 仅适用于 Replicated 和 SharedMergeTree 表,对非 Replicated 或 Shared 表不起作用。alter_update_mode
UPDATE 命令的 ALTER 查询的模式。
可能的值:
heavy- 执行常规变更。lightweight- 如果可以,则执行轻量级更新;否则执行常规变更。lightweight_force- 如果可以,则执行轻量级更新;否则抛出异常。
analyze_index_with_space_filling_curves
ORDER BY mortonEncode(x, y) 或 ORDER BY hilbertEncode(x, y),且查询中包含其参数的条件,例如 x >= 10 AND x <= 20 AND y >= 20 AND y <= 30,则使用该空间填充曲线进行索引分析。
analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested
SELECT a.b.c FROM table ARRAY JOIN a 将无法使用,而 SELECT a FROM table 的结果中也不会将 a.b.c 列包含在 Nested a 内。
analyzer_compatibility_join_using_top_level_identifier
SELECT a + 1 AS b FROM t1 JOIN t2 USING (b) 中,join 将按 t1.a + 1 = t2.b 执行,而不是按 t1.b = t2.b 执行) 。
analyzer_inline_views
any_join_distinct_right_table_keys
ANY INNER|LEFT JOIN 操作中启用 ClickHouse server 的旧版行为。
只有在你的使用场景依赖旧版
JOIN 行为时,才应出于向后兼容目的使用此设置。t1 ANY LEFT JOIN t2和t2 ANY RIGHT JOIN t1操作的结果不相同,因为 ClickHouse 使用的是左表到右表、多对一的表键映射逻辑。ANY INNER JOIN操作的结果会像SEMI LEFT JOIN操作一样,包含左表中的所有行。
t1 ANY LEFT JOIN t2和t2 ANY RIGHT JOIN t1操作的结果相同,因为 ClickHouse 在ANY RIGHT JOIN操作中使用了可提供一对多键映射的逻辑。ANY INNER JOIN操作的结果会为左右表中的每个键各包含一行。
- 0 — 旧版行为已禁用。
- 1 — 旧版行为已启用。
apply_deleted_mask
apply_mutations_on_fly
apply_patch_parts
apply_patch_parts_join_cache_buckets
apply_prewhere_after_final
apply_row_policy_after_final
- 0 — 在 FINAL 之前应用行策略和 PREWHERE (默认) 。
- 1 — 在 FINAL 之后应用行策略和 PREWHERE。
apply_settings_from_server
ALTER USER 这类查询) ,而不是通过客户端进行设置 (客户端命令行参数、SET 查询或 SELECT 查询中的 SETTINGS 部分) 。通过客户端可以将其改为 false,但不能改为 true (因为如果用户 profile 中设置了 apply_settings_from_server = false,服务器就不会发送这些设置) 。
请注意,在最初的 24.12 版本中,这里有一个 server setting (send_settings_to_client) ,但后来为了提升易用性,它被这个 client setting 取代了。
archive_adaptive_buffer_max_size_bytes
arrow_flight_request_descriptor_type
- ‘path’ — 使用 FlightDescriptor::Path (默认值,适用于大多数 Arrow Flight 服务器)
- ‘command’ — 使用带有 SELECT 查询的 FlightDescriptor::Command (Dremio 必需)
ast_fuzzer_any_query
ast_fuzzer_runs 控制的服务器端 AST fuzzer 仅对只读查询 (SELECT、EXPLAIN、SHOW、DESCRIBE、EXISTS) 进行模糊测试。当值为 true 时,则会对包括 DDL 和 INSERT 在内的所有查询类型进行模糊测试。
ast_fuzzer_runs
- 0:禁用 (默认) 。
- 大于 0 且小于 1 的值:运行单个模糊查询的概率。
- 值 >= 1:每次正常查询要运行的模糊查询数量。
asterisk_include_alias_columns
SELECT *) 中包含 ALIAS 列。
可选值:
- 0 - 已禁用
- 1 - 已启用
asterisk_include_materialized_columns
SELECT *) 中包含 MATERIALIZED 列。
可能的值:
- 0 - 禁用
- 1 - 启用
asterisk_include_virtual_columns
SELECT *) 中包含虚拟列。
可选值:
- 0 - 已禁用
- 1 - 已启用
async_insert
async_insert_busy_timeout_decrease_rate
async_insert_busy_timeout_increase_rate
async_insert_busy_timeout_max_ms
async_insert_busy_timeout_ms
自首条数据出现起,每个查询在转储已收集数据前的最长等待时间。
Cloud 默认值:1000 (1s)。
async_insert_busy_timeout_min_ms
async_insert_deduplicate
async_insert_max_data_size
104857600 (100 MiB) 。
async_insert_max_query_number
async_insert_deduplicate 为 1 时生效。
async_insert_poll_timeout_ms
async_insert_use_adaptive_busy_timeout
async_query_sending_for_remote
async_socket_for_remote
automatic_parallel_replicas_min_bytes_per_replica
automatic_parallel_replicas_mode=1 时适用) 。0 表示无阈值。
待读取的总字节数会根据已收集的统计信息进行估算。
automatic_parallel_replicas_mode
enable_analyzer = 1、enable_parallel_replicas != 0、parallel_replicas_local_plan = 1,并提供 cluster_for_parallel_replicas。
0 - 禁用,1 - 启用,2 - 仅启用统计信息收集 (禁用切换为使用并行副本执行) 。
azure_allow_parallel_part_upload
azure_check_objects_after_upload
azure_connect_timeout_ms
azure_create_new_file_on_insert
azure_ignore_file_doesnt_exist
- 1 —
SELECT返回空结果。 - 0 —
SELECT抛出异常。
azure_list_object_keys_size
azure_max_blocks_in_multipart_upload
azure_max_get_burst
azure_max_get_rps
azure_max_get_rps
azure_max_inflight_parts_for_one_file
azure_max_put_burst
azure_max_put_rps
azure_max_put_rps
azure_max_redirects
azure_max_single_part_copy_size
azure_max_single_part_upload_size
azure_max_single_read_retries
azure_max_unexpected_write_error_retries
azure_max_upload_part_size
azure_min_upload_part_size
azure_request_timeout_ms
azure_sdk_max_retries
azure_sdk_retry_initial_backoff_ms
azure_sdk_retry_max_backoff_ms
azure_skip_empty_files
- 0 — 如果空文件与所请求的格式不兼容,
SELECT会抛出异常。 - 1 — 对于空文件,
SELECT返回空结果。
azure_strict_upload_part_size
azure_throw_on_zero_files_match
- 1 —
SELECT抛出异常。 - 0 —
SELECT返回空结果。
azure_truncate_on_insert
azure_upload_part_size_multiply_factor
azure_upload_part_size_multiply_parts_count_threshold
azure_use_adaptive_timeouts
true 时,所有 azure 请求的前两次尝试都会使用较短的发送和接收超时时间。
当设置为 false 时,所有尝试都会使用相同的超时时间。
backup_restore_batch_size_for_keeper_multi
backup_restore_batch_size_for_keeper_multiread
backup_restore_failure_after_host_disconnected_for_seconds
backup_restore_finish_timeout_after_error_sec
BACKUP ON CLUSTER 或 RESTORE ON CLUSTER 操作中,发起节点在 'error' 节点出现后,等待其他主机作出响应并停止当前工作的时长。
backup_restore_keeper_fault_injection_probability
backup_restore_keeper_fault_injection_seed
backup_restore_keeper_max_retries
backup_restore_keeper_max_retries_while_handling_error
backup_restore_keeper_max_retries_while_initializing
backup_restore_keeper_retry_initial_backoff_ms
backup_restore_keeper_retry_max_backoff_ms
60000。
backup_restore_keeper_value_max_size
backup_restore_s3_retry_attempts
backup_restore_s3_retry_initial_backoff_ms
backup_restore_s3_retry_max_backoff_ms 指定的最大值
backup_restore_s3_retry_jitter_factor
backup_restore_s3_retry_max_backoff_ms。其值必须在 [0.0, 1.0] 区间内
backup_restore_s3_retry_max_backoff_ms
backup_slow_all_threads_after_retryable_s3_error
true 时,只要任意一个 S3 请求遇到可重试的 S3 错误 (例如 ‘Slow Down’) ,所有向同一备份端点发起 S3 请求的线程都会被放慢。
当设置为 false 时,每个线程都会独立处理 S3 请求的退避,而不受其他线程影响。
cache_warmer_threads
calculate_text_stack_trace
cancel_http_readonly_queries_on_client_close
SELECT) 。
Cloud 默认值:1。
cast_ipv4_ipv6_default_on_conversion_error
cast_keep_nullable
Nullable 数据类型。
启用此设置后,如果 CAST 函数的参数为 Nullable,结果也会转换为 Nullable 类型。禁用此设置时,结果始终严格为目标数据类型。
Possible values:
- 0 —
CAST结果严格为指定的目标数据类型。 - 1 — 如果参数类型为
Nullable,则CAST结果会转换为Nullable(DestinationDataType)。
Nullable 修饰的类型:
- CAST 函数
cast_string_to_date_time_mode
-
'best_effort'— 启用扩展解析。 ClickHouse 可以解析基础的YYYY-MM-DD HH:MM:SS格式以及所有 ISO 8601 日期和时间格式。例如,'2018-06-08T01:02:03.000Z'。 -
'best_effort_us'— 与best_effort类似 (差异请参见 parseDateTimeBestEffortUS -
'basic'— 使用基础解析器。 ClickHouse 只能解析基础的YYYY-MM-DD HH:MM:SS或YYYY-MM-DD格式。例如,2019-08-20 10:18:56或2019-08-20。
cast_string_to_dynamic_use_inference
cast_string_to_variant_use_inference
check_named_collection_dependencies
check_query_single_value_result
MergeTree 家族引擎中 CHECK TABLE 查询结果的详细程度。
Possible values:
- 0 — 查询会显示表中每个数据分区片段各自的检查状态。
- 1 — 查询会显示表的整体检查状态。
check_referential_table_dependencies
check_table_dependencies
checksum_on_read
cloud_mode
1。
cloud_mode_database_engine
2。
cloud_mode_engine
- 0 - 允许所有引擎
- 1 - 将 DDLs 重写为使用 *ReplicatedMergeTree
- 2 - 将 DDLs 重写为使用 SharedMergeTree
- 3 - 将 DDLs 重写为使用 SharedMergeTree,但显式指定远程磁盘时除外
- 4 - 与 3 相同,另外使用 Alias 而不是 Distributed (Alias 表将指向 Distributed 表的目标表,因此会使用对应的本地表)
2。
cluster_for_parallel_replicas
default。
cluster_function_process_archive_on_multiple_nodes
true,可提高 cluster functions 中处理归档的性能。若要保持兼容性,并避免在使用带归档的 cluster functions 从较早版本升级到 25.7+ 时出错,则应将其设置为 false。
cluster_table_function_buckets_batch_size
bucket 拆分粒度的 cluster 表函数中进行任务分布式处理时所使用的批次近似大小 (以字节为单位) 。系统会持续累积数据,直到至少达到该大小。为与数据边界对齐,实际大小可能会略大一些。
cluster_table_function_split_granularity
file— 每个任务处理整个文件。bucket— 任务按文件内部的数据块创建 (例如 Parquet 行组) 。
bucket) 时,在处理少量大文件的场景下可以提升并行度。
例如,如果一个 Parquet 文件包含多个行组,启用 bucket 粒度后,每个行组都可以由不同的工作线程独立处理。
collect_hash_table_stats_during_aggregation
collect_hash_table_stats_during_joins
compatibility
compatibility 设置会使 ClickHouse 使用由该设置指定的 ClickHouse 早期版本的默认设置。
如果某些设置已被设为非默认值,则这些设置会被保留 (只有未修改的设置才会受 compatibility 设置影响) 。
此设置接受一个以字符串形式表示的 ClickHouse 版本号,例如 22.3、22.8。空值表示此设置已禁用。
默认处于禁用状态。
在 ClickHouse Cloud 中,服务级默认的 compatibility 设置必须由 ClickHouse Cloud Support 配置。请提交工单进行设置。
不过,也可以使用标准的 ClickHouse 设置机制,在用户、Role、profile、查询或 session 级别覆盖 compatibility 设置,例如在 session 中使用
SET compatibility = '22.3',或在查询中使用 SETTINGS compatibility = '22.3'。compatibility_ignore_auto_increment_in_create_table
compatibility_ignore_collation_in_create_table
compatibility_s3_presigned_url_query_in_path
compile_aggregate_expressions
- 0 — 聚合在不使用 JIT 编译的情况下进行。
- 1 — 聚合使用 JIT 编译进行。
compile_expressions
compile_sort_description
connect_timeout
connect_timeout_with_failover_ms
connect_timeout_with_failover_secure_ms
connection_pool_max_wait_ms
- 正整数。
- 0 — 无限等待。
connections_with_failover_max_tries
convert_query_to_cnf
true 时,SELECT 查询会被转换为合取范式 (CNF) 。在某些情况下,将查询重写为 CNF 可能执行得更快 (说明请参见这个 Github issue) 。
例如,注意以下 SELECT 查询不会被修改 (默认行为) :
convert_query_to_cnf 设为 true,看看会发生什么变化:
WHERE 子句被改写为 CNF,但结果集完全相同——布尔逻辑并未改变:
right,这意味着去相关后的查询计划将包含 RIGHT JOIN,且子查询输入位于右侧。
可选值:
left- 去相关过程将生成 LEFT JOIN,输入表将出现在左侧。right- 去相关过程将生成 RIGHT JOIN,输入表将出现在右侧。
count_distinct_implementation
uniq* 函数。
可能的值:
count_distinct_optimization
count_matches_stop_at_empty_match
countMatches 函数中,一旦模式发生零长度匹配,就停止计数。
create_if_not_exists
CREATE 语句启用 IF NOT EXISTS。如果指定了此设置或 IF NOT EXISTS,且给定名称的表已存在,则不会抛出异常。
create_index_ignore_unique
create_replicated_merge_tree_fault_injection_probability
create_table_empty_primary_key_by_default
cross_join_min_bytes_to_compress
cross_join_min_rows_to_compress
cross_to_inner_join_rewrite
data_type_default_nullable
- 1 — 列定义中的数据类型默认设为
Nullable。 - 0 — 列定义中的数据类型默认不设为
Nullable。
database_atomic_wait_for_drop_and_detach_synchronously
DROP 和 DETACH 查询添加 SYNC 修饰符。
可能的值:
- 0 — 查询将延后执行。
- 1 — 查询将立即执行。
database_datalake_require_metadata_access
database_replicated_allow_explicit_uuid
database_replicated_allow_heavy_create
database_replicated_allow_only_replicated_engine
1。
database_replicated_allow_replicated_engine_arguments
database_replicated_always_detach_permanently
database_replicated_enforce_synchronous_settings
database_replicated_initial_query_timeout_sec
Replicated 数据库处理之前 DDL 队列条目的时长,单位为秒。
可能的值:
- 正整数。
- 0 — 无限。
UNDROP TABLE 语句恢复该表。
decimal_check_overflow
deduplicate_blocks_in_dependent_materialized_views
deduplicate_insert
INSERT INTO 的块去重 (适用于 Replicated* 表) 。
此设置会覆盖 insert_deduplicate 和 async_insert_deduplicate 设置。
该设置有三个可能值:
- disable — 对
INSERT INTO查询禁用去重。 - enable — 对
INSERT INTO查询启用去重。 - backward_compatible_choice — 如果特定插入类型启用了
insert_deduplicate或async_insert_deduplicate,则启用去重。
deduplicate_insert_select
INSERT SELECT 的块去重 (适用于 Replicated* 表) 。
对于 INSERT SELECT 查询,此设置会覆盖 insert_deduplicate 和 deduplicate_insert。
该设置有四个可能值:
- disable — 对
INSERT SELECT查询禁用去重。 - force_enable — 对
INSERT SELECT查询启用去重。如果 SELECT 结果不稳定,则会抛出异常。 - enable_when_possible — 如果
insert_deduplicate已启用且 SELECT 结果稳定,则启用去重;否则禁用。 - enable_even_for_bad_queries - 如果
insert_deduplicate已启用,则启用去重。如果 SELECT 结果不稳定,则会记录警告,但查询仍会在启用去重的情况下执行。此选项用于向后兼容。建议改用其他选项,因为它可能导致意外结果。
default_materialized_view_sql_security
DEFINER。
default_max_bytes_in_join
max_bytes_in_join 时,右侧表允许的最大大小。
default_normal_view_sql_security
SQL SECURITY 选项。了解更多 SQL security。
默认值为 INVOKER。
default_table_engine
CREATE statement 中未设置 ENGINE 时,使用的默认表引擎。
可能的值:
- 表示任意有效表引擎名称的字符串
SharedMergeTree。
示例
查询:
Engine 的新表都将使用 Log 表引擎:
查询:
default_temporary_table_engine
Engine 的新建临时表都会使用 Log 表引擎:
查询:
default_view_definer
DEFINER 选项。 有关 SQL security 的更多信息。
默认值为 CURRENT_USER。
defer_partition_pruning_after_final
FINAL 查询会跳过分区裁剪。这是 26.3 中引入的安全正确行为:FINAL 可能需要对主键相同但位于不同分区中的行进行去重,而分区裁剪会静默地将这类行排除在
去重输入之外。
禁用时,即使使用 FINAL 也会应用分区裁剪,从而恢复 26.3 之前的
行为。对于在分区列上带有 WHERE 谓词的查询,这样通常会快得多,
但只有在相同主键的行不可能出现在不同分区中时才是正确的——例如分区列在 insert
时设定且之后从不变化的事件日志表。
此设置只影响分区键列未包含在排序键中的分区表;对于其他表,始终会应用分区裁剪。
可能的值:
- 0 — 在
FINAL之前应用分区裁剪 (26.3 之前的行为,速度更快,但一般情况下并不安全) 。 - 1 — 将分区裁剪延后到
FINAL之后 (默认,保证正确性) 。
delta_lake_enable_engine_predicate
delta_lake_enable_expression_visitor_logging
delta_lake_insert_max_bytes_in_data_file
delta_lake_insert_max_rows_in_data_file
delta_lake_log_metadata
delta_lake_reload_schema_for_consistency
delta_lake_snapshot_end_version
delta_lake_snapshot_start_version
delta_lake_snapshot_version
delta_lake_throw_on_engine_predicate_error
describe_compact_output
describe_include_subcolumns
- 0 —
DESCRIBE查询中不包含子列。 - 1 —
DESCRIBE查询中包含子列。
describe_include_virtual_columns
方言
dictionary_use_async_executor
dictionary_validate_primary_key_type
distinct_overflow_mode
throw:抛出异常 (默认) 。break:停止执行查询并返回部分结果,就像源数据 已经耗尽一样。
distributed_aggregation_memory_efficient
distributed_background_insert_batch
distributed_directory_monitor_batch_inserts
启用/禁用按批次发送已插入的数据。
启用批次发送后,Distributed 表引擎会尝试在一次操作中发送多个已插入数据文件,而不是分别发送。批次发送能更高效地利用服务器和网络资源,从而提升集群性能。
可能值:
- 1 — 已启用。
- 0 — 已禁用。
distributed_background_insert_max_sleep_time_ms
distributed_directory_monitor_max_sleep_time_ms
Distributed 表引擎发送数据的最大时间间隔。用于限制 distributed_background_insert_sleep_time_ms 设置中所设时间间隔的指数增长。
可能的值:
- 以毫秒为单位的正整数。
distributed_background_insert_sleep_time_ms
distributed_directory_monitor_sleep_time_ms
Distributed 表引擎发送数据时使用的基础时间间隔。发生错误时,实际时间间隔会以指数级增长。
可能的值:
- 以毫秒为单位的正整数。
distributed_background_insert_split_batch_on_failure
distributed_directory_monitor_split_batch_on_failure
启用/禁用在发生失败时拆分批次。
有时,向远程分片发送某个批次可能会失败,原因是在后续的复杂管道中 (例如带有 GROUP BY 的 MATERIALIZED VIEW) 触发了 Memory limit exceeded 或类似错误。在这种情况下,重试也无济于事 (而且会导致该表的分布式发送卡住) ;但如果将该批次中的文件逐个发送,则可能成功执行 INSERT。
因此,将此设置设为 1 后,会对这类批次禁用批处理 (即临时对失败批次禁用 distributed_background_insert_batch) 。
可能的值:
- 1 — 已启用。
- 0 — 已禁用。
此设置也会影响损坏的批次 (这类批次可能是由于服务器 (机器) 异常终止,且 Distributed 表引擎未启用
fsync_after_insert/fsync_directories 而产生的) 。不应依赖自动批次拆分,因为这可能会影响性能。
distributed_background_insert_timeout
insert_distributed_timeout
向 Distributed 表执行插入查询的超时时间。该设置仅在启用 insert_distributed_sync 时生效。值为 0 表示不超时。
distributed_cache_alignment
distributed_cache_bypass_connection_pool
distributed_cache_connect_backoff_max_ms
distributed_cache_connect_backoff_min_ms
distributed_cache_connect_max_tries
distributed_cache_connect_timeout_ms
distributed_cache_credentials_refresh_period_seconds
distributed_cache_data_packet_ack_window
distributed_cache_discard_connection_if_unread_data
distributed_cache_fetch_metrics_only_from_current_az
distributed_cache_file_cache_name
distributed_cache_log_mode
distributed_cache_max_unacked_inflight_packets
distributed_cache_min_bytes_for_seek
distributed_cache_pool_behaviour_on_limit
distributed_cache_prefer_bigger_buffer_size
distributed_cache_read_only_from_current_az
distributed_cache_read_request_max_tries
distributed_cache_receive_response_wait_milliseconds
distributed_cache_receive_timeout_milliseconds
20000。
distributed_cache_receive_timeout_ms
distributed_cache_send_timeout_ms
distributed_cache_tcp_keep_alive_timeout_ms
distributed_cache_throw_on_error
distributed_cache_use_clients_cache_for_read
distributed_cache_use_clients_cache_for_write
distributed_cache_wait_connection_from_pool_milliseconds
distributed_cache_write_request_max_tries
distributed_connections_pool_size
distributed_ddl_entry_format_version
6。
distributed_ddl_output_mode
throw— 返回结果集,其中包含查询已完成的所有主机上的查询执行状态。如果查询在某些主机上失败,则会重新抛出第一个异常。如果查询在某些主机上尚未完成,且已超过 distributed_ddl_task_timeout,则会抛出TIMEOUT_EXCEEDED异常。none— 与throw类似,但分布式 DDL 查询不返回结果集。null_status_on_timeout— 如果查询在对应主机上尚未完成,则在结果集的某些行中返回NULL作为执行状态,而不是抛出TIMEOUT_EXCEEDED。never_throw— 如果查询在某些主机上失败,则不会抛出TIMEOUT_EXCEEDED,也不会重新抛出异常。none_only_active- 与none类似,但不会等待Replicated数据库的非活动副本。注意:在此模式下,无法判断查询是否未在某个副本上执行,以及它是否会在后台执行。null_status_on_timeout_only_active— 与null_status_on_timeout类似,但不会等待Replicated数据库的非活动副本throw_only_active— 与throw类似,但不会等待Replicated数据库的非活动副本
none_only_active。
distributed_ddl_task_timeout
- 正整数。
- 0 — 异步模式。
- 负整数 — 无限超时。
distributed_foreground_insert
insert_distributed_sync
启用或禁用向 Distributed 表同步插入数据。
默认情况下,向 Distributed 表插入数据时,ClickHouse server 会以后台模式将数据发送到集群节点。设置 distributed_foreground_insert=1 时,数据会以同步方式处理,并且只有在所有分片上的数据都已保存后,INSERT 操作才会成功 (如果 internal_replication 为 true,则每个分片至少保存到一个副本) 。
可能的值:
0— 数据以后台模式插入。1— 数据以同步模式插入。
1。
另请参见
distributed_group_by_no_merge
0— 禁用 (最终查询处理在 initiator 节点上完成) 。1- 在分布式查询处理中,不合并来自不同服务器的聚合状态 (查询完全在分片上处理,initiator 仅负责代理数据) ;当能够确定不同分片上的键各不相同时,可使用此设置。2- 与1`` 相同,但会在 initiator 上应用ORDER BY和LIMIT(对于像distributed_group_by_no_merge=1这样在远程节点上完全处理的查询,这是无法实现的);可用于带有ORDER BY和/或LIMIT` 的查询。
distributed_index_analysis
cluster_for_parallel_replicas 中的副本。
另请参见
- distributed_index_analysis_for_non_shared_merge_tree
- distributed_index_analysis_min_parts_to_activate
- distributed_index_analysis_min_indexes_bytes_to_activate
distributed_index_analysis_only_on_coordinator
IN (SELECT ...)) 时,这可以避免生成 O(N^2) 的查询,
因为否则每个 follower 副本都会各自触发自己的分布式索引分析;
但如果子查询中使用了大表,也会降低分布式索引分析的效率。
distributed_insert_skip_read_only_replicas
- 0 — INSERT 与往常一样;如果发送到只读副本,则会失败
- 1 — 发起节点会在将数据发送到分片之前跳过只读副本。
distributed_plan_default_reader_bucket_count
distributed_plan_default_shuffle_join_bucket_count
distributed_plan_execute_locally
distributed_plan_force_exchange_kind
- ” - 不强制使用任何类型的 Exchange 算子,由优化器自行选择,
- ‘Persisted’ - 在对象存储中使用临时 File,
- ‘Streaming’ - 通过网络流式传输 Exchange 数据。
distributed_plan_force_shuffle_aggregation
distributed_plan_max_rows_to_broadcast
distributed_plan_optimize_exchanges
distributed_plan_prefer_replicas_over_workers
distributed_product_mode
GLOBAL 子查询时,ClickHouse 会应用此设置。
限制:
- 仅适用于
IN和JOIN子查询。 - 仅当
FROM部分使用了包含多个分片的分布式表时。 - 仅当子查询涉及包含多个分片的分布式表时。
- 不适用于表值 remote 函数。
deny— 默认值。禁止使用这类子查询 (返回 “Double-distributed in/JOIN subqueries is denied” 异常) 。local— 将子查询中的数据库和表替换为目标服务器 (分片) 的本地数据库和表,同时保留普通的IN/JOIN。global— 将IN/JOIN查询替换为GLOBAL IN/GLOBAL JOIN。allow— 允许使用这类子查询。
distributed_push_down_limit
- 通过网络传输额外的行;
- 在发起节点上处理超出限制的行。
distributed_push_down_limit 只有在至少满足以下一个条件时才会更改查询执行方式:
- distributed_group_by_no_merge > 0。
- 查询不包含
GROUP BY/DISTINCT/LIMIT BY,但包含ORDER BY/LIMIT。 - 查询包含带有
ORDER BY/LIMIT的GROUP BY/DISTINCT/LIMIT BY,并且:
- 0 — 禁用。
- 1 — 启用。
- distributed_group_by_no_merge
- optimize_skip_unused_shards
- optimize_distributed_group_by_sharding_key
distributed_replica_error_cap
- 类型:无符号整数
- 默认值:1000
- load_balancing
- Distributed 表引擎
- distributed_replica_error_half_life
- distributed_replica_max_ignored_errors
distributed_replica_error_half_life
- 类型:秒
- 默认值:60 秒
distributed_replica_max_ignored_errors
- 类型:无符号整数
- 默认值:0
load_balancing 算法选择副本时,可忽略的错误数。
另请参见:
do_not_merge_across_partitions_select_final
dynamic_disk_allow_from_env
from_env 替换 (即在 disk() 函数的参数中使用) 。
默认禁用,以防止用户在定义表存储时读取任意环境变量。
dynamic_disk_allow_from_zk
from_zk 替换 (即在 disk() 函数参数中使用) 。
默认禁用。
dynamic_disk_allow_include
include (即在 disk() 函数参数中) 。
默认禁用。
dynamic_throw_on_type_mismatch
true(默认) — 抛出异常。false— 对这些行返回NULL。
empty_result_for_aggregation_by_constant_keys_on_empty_set
empty_result_for_aggregation_by_empty_set
enable_adaptive_memory_spill_scheduler
enable_add_distinct_to_in_subqueries
IN 子查询中启用 DISTINCT。这是一个需要权衡的设置:启用后,通过确保只发送唯一值,可以大幅减小为分布式 IN 子查询传输的临时表大小,并显著加快分片之间的数据传输。
不过,启用此设置会给每个节点带来额外的合并开销,因为必须执行去重 (DISTINCT) 。当网络传输成为瓶颈,且可以接受额外的合并成本时,可使用此设置。
enable_automatic_decision_for_merging_across_partitions_for_final
enable_blob_storage_log
enable_blob_storage_log_for_read_operations
enable_blob_storage_log。
enable_early_constant_folding
enable_extended_results_for_datetime_functions
Date32 类型结果 (相较于 Date 类型) ,
或返回扩展范围的 DateTime64 类型结果 (相较于 DateTime 类型) 。
Possible values:
0— 对于所有类型的参数,函数均返回Date或DateTime。1— 对于Date32或DateTime64参数,函数返回Date32或DateTime64;否则返回Date或DateTime。
| 函数 | enable_extended_results_for_datetime_functions = 0 | enable_extended_results_for_datetime_functions = 1 |
|---|---|---|
toStartOfYear | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toStartOfISOYear | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toStartOfQuarter | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toStartOfMonth | 返回 Date 或 DateTime | Date/DateTime 输入时,返回 Date/DateTimeDate32/DateTime64 输入时,返回 Date32/DateTime64 |
toStartOfWeek | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toLastDayOfWeek | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toLastDayOfMonth | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toMonday | 返回 Date 或 DateTime | 对于 Date/DateTime 类型的输入,返回 Date/DateTime对于 Date32/DateTime64 类型的输入,返回 Date32/DateTime64 |
toStartOfDay | 返回 DateTime注意:对于超出 1970-2149 范围的值,会返回错误结果 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
toStartOfHour | 返回 DateTime注意:对于超出 1970–2149 范围的值,结果会不正确 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
toStartOfFifteenMinutes | 返回 DateTime注意:对于超出 1970-2149 范围的值,结果会不正确。 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
toStartOfTenMinutes | 返回 DateTime注意:对于超出 1970-2149 范围的值,结果可能不正确 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
toStartOfFiveMinutes | 返回 DateTime注意:对于超出 1970-2149 范围的值,结果会不正确 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
toStartOfMinute | 返回 DateTime注意:对于超出 1970-2149 范围的值,结果会不正确 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
timeSlot | 返回 DateTime注意:对于超出 1970-2149 范围的值,结果会不正确。 | 对于 Date/DateTime 类型的输入,返回 DateTime对于 Date32/DateTime64 类型的输入,返回 DateTime64 |
enable_filesystem_cache
enable_filesystem_cache_log
enable_filesystem_cache_on_write_operations
write-through 缓存。若设置为 false,则对写入操作禁用 write-through 缓存。若设置为 true,则只要在 server config 的 cache disk configuration 部分启用了 cache_on_write_operations,就会启用 write-through 缓存。
更多详情请参见“使用本地缓存”。
Cloud 默认值:1。
enable_filesystem_read_prefetches_log
enable_full_text_index
allow_experimental_full_text_index
如果设置为 true,则允许使用文本索引。
enable_global_with_statement
enable_hdfs_pread
hdfsPread。如果禁用,则会使用 hdfsRead 和 hdfsSeek 来读取 HDFS 文件。
enable_http_compression
- 0 — 禁用。
- 1 — 启用。
enable_job_stack_trace
enable_join_fixed_hash_table_conversion
enable_join_runtime_filters
enable_join_transitive_predicates
A.x = B.x 和 B.x = C.x,会额外添加一个 A.x = C.x 谓词,
以便 JOIN 顺序优化器能够考虑直接的 (A JOIN C) 执行计划。
enable_lazy_columns_replication
enable_lightweight_delete
allow_experimental_lightweight_delete
启用 MergeTree 表的轻量级 DELETE 变更功能。
enable_lightweight_update
allow_experimental_lightweight_update
允许使用轻量级更新。
enable_materialized_cte
enable_memory_bound_merging_of_aggregation_results
enable_multiple_prewhere_read_steps
enable_named_columns_in_function_tuple
enable_optimize_predicate_expression
SELECT 查询中启用谓词下推。
对于分布式查询,谓词下推可显著减少网络流量。
可能的值:
- 0 — 禁用。
- 1 — 启用。
SELECT count() FROM test_table WHERE date = '2018-10-10'SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'
enable_optimize_predicate_expression = 1,这两个查询的执行时间相同,因为 ClickHouse 在处理子查询时会将 WHERE 条件下推到子查询中。
如果 enable_optimize_predicate_expression = 0,那么第二个查询的执行时间会长得多,因为只有在子查询完成后,WHERE 子句才会应用到所有数据上。
enable_optimize_predicate_expression_to_final_subquery
enable_order_by_all
ORDER BY ALL 排序语法,参见 ORDER BY。
可能的值:
- 0 — 禁用 ORDER BY ALL。
- 1 — 启用 ORDER BY ALL。
enable_parallel_blocks_marshalling
enable_parsing_to_custom_serialization
enable_positional_arguments
- 0 — 不支持位置参数。
- 1 — 支持位置参数:可使用列编号代替列名。
enable_positional_arguments_for_projections
这是一个专家级设置;如果你刚开始使用 ClickHouse,则不应更改它。
- 0 — 不支持位置参数。
- 1 — 支持位置参数:可以使用列号代替列名。
enable_producing_buckets_out_of_order_in_aggregation
distributed_aggregation_memory_efficient) 乱序生成桶。
当聚合中的桶大小分布不均时,此设置可允许副本在仍处理一些较重的低 ID 桶时,向发起节点发送更高 ID 的桶,从而提升性能。
缺点是可能会增加内存使用量。
enable_reads_from_query_cache
SELECT 查询结果。
可能的值:
- 0 - 禁用
- 1 - 启用
enable_s3_requests_logging
enable_scalar_subquery_optimization
enable_scopes_for_with_statement
启用此设置后,会禁用这样一项优化:在规划阶段完成后,从快照中移除不必要的数据分区片段。
因此,长时间运行的查询可能会在整个耗时期间一直保留已过时的数据分区片段,从而延迟分区片段清理并增加存储压力。此设置当前仅适用于 MergeTree 家族的表。
- 0 - 已禁用
- 1 - 已启用
enable_sharing_sets_for_mutations
enable_software_prefetch_in_aggregation
enable_software_prefetch_in_join
enable_time_time64_type
allow_experimental_time_time64_type
允许创建 Time 和 Time64 数据类型。
enable_unaligned_array_join
enable_url_encoding
enable_vertical_final
enable_writes_to_query_cache
SELECT 查询的结果会存储在查询缓存中。
可能的值:
- 0 - 禁用
- 1 - 启用
enforce_strict_identifier_format
engine_file_allow_create_multiple_files
JSON、ORC、Parquet 等) ,此设置用于启用或禁用每次插入时创建新文件的行为。如果启用,则每次插入都会按以下模式创建一个新文件:
data.Parquet -> data.1.Parquet -> data.2.Parquet,等等。
可能的值:
- 0 —
INSERT查询会将新数据追加到文件末尾。 - 1 —
INSERT查询会创建一个新文件。
engine_file_empty_if_not_exists
- 0 —
SELECT抛出异常。 - 1 —
SELECT返回空结果。
engine_file_skip_empty_files
- 0 — 如果空文件与请求的格式不兼容,
SELECT会抛出异常。 - 1 — 对于空文件,
SELECT返回空结果。
engine_file_truncate_on_insert
- 0 —
INSERT查询会将新数据追加到文件末尾。 - 1 —
INSERT查询会用新数据替换文件的现有内容。
engine_url_skip_empty_files
- 0 — 如果空文件与请求的格式不兼容,
SELECT会抛出异常。 - 1 — 对于空文件,
SELECT返回空结果。
exact_rows_before_limit
except_default_mode
exclude_materialize_skip_indexes_on_insert
execute_exists_as_scalar_subquery
0。
external_storage_connect_timeout_sec
external_storage_max_read_bytes
external_storage_max_read_rows
external_storage_rw_timeout_sec
external_table_functions_use_nulls
- 0 — 表函数显式使用 Nullable 列。
- 1 — 表函数隐式使用 Nullable 列。
0,表函数不会生成 Nullable 列,而是插入默认值来代替 NULL。这同样适用于数组中的 NULL 值。
external_table_strict_query
extract_key_value_pairs_max_pairs_per_row
extract_kvp_max_pairs_per_row
extractKeyValuePairs 函数可生成的键值对最大数量。用于防止占用过多内存。
极值
fallback_to_stale_replicas_for_distributed_queries
SELECT 时使用。
默认值为 1 (已启用) 。
filesystem_cache_allow_background_download
filesystem_cache_boundary_alignment
filesystem_cache_enable_background_download_during_fetch
filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage
filesystem_cache_max_download_size
filesystem_cache_name
filesystem_cache_prefer_bigger_buffer_size
filesystem_cache_reserve_space_wait_lock_timeout_milliseconds
filesystem_cache_segments_batch_size
filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit
skip_download_if_exceeds_query_cache
如果会超过查询缓存大小,则跳过从远程文件系统下载
filesystem_prefetch_max_memory_usage
filesystem_prefetch_step_bytes
auto——系统会自动推导出大致最佳的预取步长,但可能并非 100% 最优。由于受设置 filesystem_prefetch_min_bytes_for_single_read_task 的影响,实际值可能会有所不同
filesystem_prefetch_step_marks
auto —— 系统会自动推导出一个近似最优的预取步长,但不一定是 100% 最优。由于受设置 filesystem_prefetch_min_bytes_for_single_read_task 的影响,实际值可能有所不同
filesystem_prefetches_limit
filesystem_prefetches_max_memory_usage
final
- 0 - 禁用
- 1 - 启用
finalize_projection_parts_synchronously
flatten_nested
- 1 — Nested 列会展平为独立的数组。
- 0 — Nested 列保持为单个元组数组。
0,则可以使用任意层级的嵌套。
示例
查询:
force_aggregate_partitions_independently
force_aggregation_in_order
force_data_skipping_indices
force_grouping_standard_compatibility
force_index_by_date
force_index_by_date=1,ClickHouse 会检查查询是否包含可用于限制数据范围的日期键条件。如果没有合适的条件,则会抛出异常。不过,它不会检查该条件是否能减少需要读取的数据量。例如,即使条件 Date != ' 2000-01-01 ' 与表中的所有数据都匹配 (即运行该查询需要全表扫描) ,该条件也是可接受的。有关 MergeTree 表中数据范围的更多信息,请参见 MergeTree。
force_optimize_projection
SELECT 查询中强制使用投影。
可能的值:
- 0 — 不强制使用投影优化。
- 1 — 强制使用投影优化。
force_optimize_projection_name
- string:查询中使用的投影名称
force_optimize_skip_unused_shards
- 0 — 已禁用。ClickHouse 不会抛出异常。
- 1 — 已启用。仅当表具有分片键时,才会禁用查询执行。
- 2 — 已启用。无论表是否定义了分片键,都会禁用查询执行。
force_optimize_skip_unused_shards_nesting
force_optimize_skip_unused_shards (因此仍需启用 force_optimize_skip_unused_shards) 。例如,一个 Distributed 表查询另一个 Distributed 表时就属于这种情况。
可能的值:
- 0 - 禁用,
force_optimize_skip_unused_shards始终生效。 - 1 — 仅在第一层启用
force_optimize_skip_unused_shards。 - 2 — 在最多两层嵌套内启用
force_optimize_skip_unused_shards。
force_primary_key
force_primary_key=1,ClickHouse 会检查查询是否包含可用于限制数据范围的主键条件。如果没有合适的条件,则会抛出异常。不过,它不会检查该条件是否会减少需要读取的数据量。有关 MergeTree 表中数据范围的更多信息,请参见 MergeTree。
force_remove_data_recursively_on_drop
formatdatetime_e_with_space_padding
formatDateTime 中的格式说明符 ‘%e’ 会在个位数日期前补一个空格,例如输出 ’ 2’,而不是 ‘2’。
formatdatetime_f_prints_scale_number_of_digits
formatDateTime 中的格式说明符 %f 对于 DateTime64 只会输出与标度相对应位数的数字,而不是固定输出 6 位数字。
formatdatetime_f_prints_single_zero
formatDateTime 中的格式说明符 %f 在格式化值不含秒的小数部分时,会输出单个零,而不是六个零。
formatdatetime_format_without_leading_zeros
formatDateTime 中的格式说明符 %c、%l 和 %k 在输出月份和小时时不会补前导零。
formatdatetime_parsedatetime_m_is_month_name
formatDateTime 和 parseDateTime 中的格式说明符 %M 会输出/解析月份名称,而不是分钟。
fsync_metadata
.sql 文件时是否执行 fsync。默认启用。
如果 server 中有数百万个持续创建和删除的小型表,禁用它会更合适。
function_date_trunc_return_type_behavior
dateTrunc 函数结果类型的行为。
Possible values:
- 0 - 当第二个参数为
DateTime64/Date32时,返回类型将为DateTime64/Date32,不受第一个参数中时间单位的影响。 - 1 - 对于
Date32,结果始终为Date。对于DateTime64,当时间单位为second及以上时,结果为DateTime。
function_implementation
function_json_value_return_type_allow_complex
json_value 函数返回复杂类型 (例如 struct、array、map) 。
- true — 允许。
- false — 不允许。
function_json_value_return_type_allow_nullable
NULL。
- true — 允许。
- false — 不允许。
function_locate_has_mysql_compatible_argument_order
- 0 — 函数
locate接受参数(haystack, needle[, start_pos])。 - 1 — 函数
locate接受参数(needle, haystack[, start_pos])(兼容 MySQL 的行为)
function_range_max_elements_in_block
- 正整数。
function_sleep_max_microseconds_per_block
sleep 每个块允许休眠的最大微秒数。如果用户调用时传入更大的值,则会抛出异常。这是一个安全阈值。
function_visible_width_behavior
visibleWidth 行为的版本。0 - 仅统计码点数量;1 - 正确统计零宽字符和组合字符,将全宽字符按两个字符计数,估算制表符宽度,并统计删除字符。
functions_h3_default_if_invalid
geo_distance_returns_float64_on_float64_arguments
geoDistance、greatCircleDistance 和 greatCircleAngle 函数的四个参数均为 Float64,则返回 Float64,并在内部计算中使用双精度。在之前的 ClickHouse 版本中,这些函数始终返回 Float32。
geotoh3_argument_order
geoToH3 在设置为 lon_lat 时接受 (lon, lat),在设置为 lat_lon 时接受 (lat, lon)。
glob_expansion_max_elements
grace_hash_join_initial_buckets
grace_hash_join_max_buckets
group_by_overflow_mode
throw:抛出异常break:停止执行查询并返回部分结果any:继续对已进入集合的键进行聚合,但不再向集合中添加新键。
any 值可以运行 GROUP BY 的近似计算。该近似结果的质量
取决于数据的统计特性。
group_by_two_level_threshold
group_by_two_level_threshold_bytes
group_by_use_nulls
ROLLUP、CUBE 或 GROUPING SETS 指定器时,某些聚合键可能不会参与生成某些结果行。
这些键对应的列会根据此设置,在相应行中填充默认值或 NULL。
可能的值:
- 0 — 使用聚合键类型的默认值来填补缺失值。
- 1 — ClickHouse 会按照 SQL 标准执行
GROUP BY。聚合键的类型会转换为 Nullable。对于未使用相应聚合键的行,其对应列将填充为 NULL。
h3togeo_lon_lat_result_order
h3ToGeo 返回 (lon, lat);否则返回 (lat, lon)。
handshake_timeout_ms
hdfs_create_new_file_on_insert
data.Parquet.gz -> data.1.Parquet.gz -> data.2.Parquet.gz 等。
Possible values:
- 0 —
INSERT查询会将新数据追加到文件末尾。 - 1 —
INSERT查询会创建一个新文件。
hdfs_ignore_file_doesnt_exist
- 1 —
SELECT返回空结果。 - 0 —
SELECT抛出异常。
hdfs_replication
hdfs_skip_empty_files
- 0 — 如果空文件与所请求的格式不兼容,
SELECT会抛出异常。 - 1 — 对于空文件,
SELECT返回空结果。
hdfs_throw_on_zero_files_match
- 1 —
SELECT抛出异常。 - 0 —
SELECT返回空结果。
hdfs_truncate_on_insert
- 0 —
INSERT查询会将新数据追加到文件末尾。 - 1 —
INSERT查询会用新数据替换文件中的现有内容。
hedged_connection_timeout_ms
highlight_max_matches_per_row
- 正整数。
hnsw_candidate_list_size_for_search
hsts_max_age
http_connection_timeout
- 任意正整数。
- 0 - 禁用 (无限超时) 。
http_headers_progress_interval_ms
http_headers_read_timeout
http_make_head_request
http_make_head_request 设置允许在通过 HTTP 读取数据时发送 HEAD 请求,以获取待读取文件的信息,例如文件大小。该设置默认启用,因此如果 server 不支持 HEAD 请求,可能需要将其禁用。
http_max_field_name_size
http_max_field_value_size
http_max_fields
http_max_multipart_form_data_size
http_max_request_header_size
http_max_request_param_data_size
http_max_tries
http_max_uri_size
- 正整数。
http_native_compression_disable_checksumming_on_decompress
gzip 或 deflate) 。
更多信息,请参阅 HTTP 接口说明。
可能的值:
- 0 — 已禁用。
- 1 — 已启用。
http_receive_timeout
- 任意正整数。
- 0 - 禁用 (无限超时) 。
http_response_buffer_size
http_wait_end_of_query 时) 刷新到磁盘之前,在 server 内存中缓冲的字节数。
http_response_headers
SET http_response_headers = '{"Content-Type": "image/png"}'
http_retry_initial_backoff_ms
http_retry_max_backoff_ms
http_send_timeout
- 任意正整数。
- 0 - 已禁用 (超时无限制) 。
仅适用于默认 profile。更改生效需要重启服务器。
http_skip_not_found_url_for_globs
http_wait_end_of_query
http_write_exception_in_output_format
http_zlib_compression_level
iceberg_compaction_data_cleanup
iceberg_compaction_delay_bias
iceberg_data_file_size_lower_threshold_compaction
iceberg_data_file_size_upper_threshold_compaction
iceberg_delete_data_on_drop
iceberg_expire_default_max_ref_age_ms
history.expire.max-ref-age-ms 不存在时,expire_snapshots 使用的默认值。
iceberg_expire_default_max_snapshot_age_ms
expire_snapshots 使用的 Iceberg 表属性 history.expire.max-snapshot-age-ms 的默认值。
iceberg_expire_default_min_snapshots_to_keep
expire_snapshots 使用的 Iceberg 表属性 history.expire.min-snapshots-to-keep 的默认值。
iceberg_insert_max_bytes_in_data_file
iceberg_insert_max_partitions
iceberg_insert_max_rows_in_data_file
iceberg_max_number_datafiles_to_compact
iceberg_metadata_compression_method
.metadata.json 文件所用的方法。
iceberg_metadata_log_level
- none - 不记录元数据日志。
- metadata - 根 metadata.json 文件。
- manifest_list_metadata - 包含以上全部内容,外加与某个快照对应的 avro manifest 列表中的元数据。
- manifest_list_entry - 包含以上全部内容,外加 avro manifest 列表条目。
- manifest_file_metadata - 包含以上全部内容,外加已遍历的 avro manifest 文件中的元数据。
- manifest_file_entry - 包含以上全部内容,外加已遍历的 avro manifest 文件条目。
iceberg_metadata_staleness_ms
iceberg_orphan_files_older_than_seconds
remove_orphan_files() 过程时,如果省略 older_than 参数,则使用该值。默认值为 259200 (3 天) 。
iceberg_snapshot_id
iceberg_timestamp_ms
idle_connection_timeout
- 正整数 (0 表示立即关闭,即 0 秒后) 。
ignore_cold_parts_seconds
ignore_data_skipping_indices
xy_idx 索引:
ignore_drop_queries_probability
ignore_format_null_for_explain
EXPLAIN 查询中的 FORMAT Null 将被忽略,转而使用默认输出格式。
如果禁用,带有 FORMAT Null 的 EXPLAIN 查询将不会产生任何输出 (这是向后兼容的行为) 。
ignore_materialized_views_with_dropped_target_table
ignore_on_cluster_for_replicated_access_entities_queries
ignore_on_cluster_for_replicated_database
ignore_on_cluster_for_replicated_named_collections_queries
ignore_on_cluster_for_replicated_udf_queries
implicit_select
SELECT 关键字开头的简单 SELECT 查询,便于计算器式用法;例如,1 + 2 也会成为有效查询。
在 clickhouse-local 中,此设置默认启用,也可显式禁用。
implicit_table_at_top_level
implicit_transaction
inject_random_order_for_select_without_order_by
ORDER BY rand()。
仅在子查询深度 = 0 时应用。子查询和 INSERT INTO … SELECT 不受影响。
如果顶层结构是 UNION,则会分别为其所有子项独立注入 ORDER BY rand()。
仅对测试和开发有用 (缺少 ORDER BY 是导致查询结果非确定性的原因之一) 。
insert_allow_materialized_columns
insert_deduplicate
INSERT 的块去重功能 (适用于 Replicated* 表) 。
可能的值:
- 0 — 禁用。
- 1 — 启用。
INSERT 语句插入到复制表中的块会执行去重 (参见 数据复制) 。
对于复制表,默认情况下每个分区仅对最近的 100 个块执行去重 (参见 replicated_deduplication_window、replicated_deduplication_window_seconds) 。
对于非复制表,请参见 non_replicated_deduplication_window。
insert_deduplication_token
- 任意字符串
insert_deduplication_token 非空时,才会将其用于去重。
对于复制表,默认情况下,每个分区只有最近 100 次插入会被去重 (请参见 replicated_deduplication_window、replicated_deduplication_window_seconds) 。
对于非复制表,请参见 non_replicated_deduplication_window。
insert_deduplication_token 在分区级别生效 (与 insert_deduplication checksum 相同) 。多个分区可以使用相同的 insert_deduplication_token。insert_keeper_fault_injection_probability
insert_keeper_fault_injection_seed
insert_keeper_max_retries
- 正整数。
- 0 — 禁用重试
20。
Keeper 请求会在经过一定超时后进行重试。该超时由以下设置控制:insert_keeper_retry_initial_backoff_ms、insert_keeper_retry_max_backoff_ms。
第一次重试会在 insert_keeper_retry_initial_backoff_ms 指定的超时后执行。后续超时将按如下方式计算:
insert_keeper_retry_initial_backoff_ms=100、insert_keeper_retry_max_backoff_ms=10000 且 insert_keeper_max_retries=8,那么超时时间将依次为 100, 200, 400, 800, 1600, 3200, 6400, 10000。
除了提供容错能力外,重试机制也旨在带来更好的用户体验——例如,当 Keeper 因升级而重启时,它可以避免在执行 INSERT 期间返回错误。
insert_keeper_retry_initial_backoff_ms
- 正整数。
- 0 — 无超时
insert_keeper_retry_max_backoff_ms
- 正整数。
- 0 — 最大超时时间不受限制
insert_null_as_default
NULL 会导致异常。如果列类型是 Nullable,则无论此设置如何,NULL 值都会按原样插入。
此设置适用于 INSERT … SELECT 查询。请注意,SELECT 子查询可以通过 UNION ALL 子句进行拼接。
可能的值:
- 0 — 向非 Nullable 列插入
NULL会导致异常。 - 1 — 插入列的默认值而不是
NULL。
insert_quorum
此设置不适用于 SharedMergeTree,更多信息请参见 SharedMergeTree 一致性。
- 如果
insert_quorum < 2,则禁用仲裁写入。 - 如果
insert_quorum >= 2,则启用仲裁写入。 - 如果
insert_quorum = 'auto',则使用多数值 (number_of_replicas / 2 + 1) 作为仲裁数。
insert_quorum_timeout 期间成功将数据写入 insert_quorum 个副本时,INSERT 才会成功。如果由于任何原因,成功写入的副本数未达到 insert_quorum,则此次写入会被视为失败,ClickHouse 会从所有已写入数据的副本中删除已插入的块。
当禁用 insert_quorum_parallel 时,仲裁中的所有副本都是一致的,也就是说,它们都包含此前所有 INSERT 查询的数据 (INSERT 序列会被线性化) 。读取通过 insert_quorum 写入的数据时,如果 insert_quorum_parallel 已禁用,可以使用 select_sequential_consistency 为 SELECT 查询启用顺序一致性。
在以下情况下,ClickHouse 会抛出异常:
- 如果查询时可用副本的数量少于
insert_quorum。 - 当禁用
insert_quorum_parallel时,如果前一个块尚未写入insert_quorum个副本就尝试写入数据。这种情况可能发生在用户试图在前一个带有insert_quorum的INSERT查询完成之前,对同一张表执行另一个INSERT查询时。
insert_quorum_parallel
此设置不适用于 SharedMergeTree,更多信息请参见 SharedMergeTree 一致性。
INSERT 查询的并行执行。启用后,在先前查询尚未完成时,仍可发送额外的 INSERT 查询。禁用后,对同一表的额外写入将被拒绝。
可能的值:
- 0 — 禁用。
- 1 — 启用。
insert_quorum_timeout
insert_shard_id
0,则指定数据将同步插入到 Distributed 表中的哪个分片。
如果 insert_shard_id 的值不正确,服务器将抛出异常。
要获取 requested_cluster 上的分片数量,可以检查服务器配置或使用以下查询:
- 0 — 已禁用。
- 从
1到对应 Distributed 表的shards_num之间的任意数字。
interactive_delay
intersect_default_mode
jemalloc_collect_profile_samples_in_trace_log
jemalloc_enable_profiler
jemalloc_profile_text_collapsed_use_count
jemalloc_profile_text_output_format
jemalloc_profile_text_symbolize_with_inline
symbolized 和 collapsed 输出格式。
join_algorithm
- grace_hash
grace_hash_join_initial_buckets) 。这样可以确保每个桶都能独立处理。第一个桶中的行会加入内存中的哈希表,其余行则保存到磁盘。如果哈希表增长超出内存限制 (例如由 max_bytes_in_join 设置) ,则会增加桶的数量,并重新确定每一行所属的桶。凡是不属于当前桶的行,都会被刷写并重新分配。
支持 INNER/LEFT/RIGHT/FULL ALL/ANY JOIN。
- hash
JOIN ON 部分通过 OR 组合的多个连接键。
使用 hash 算法时,JOIN 的右侧部分会加载到 RAM 中。
- parallel_hash
hash join 的一种变体:它会将数据拆分为多个桶,并并发构建多个哈希表而不是一个,以加快这一过程。
使用 parallel_hash 算法时,JOIN 的右侧部分会加载到 RAM 中。
- partial_merge
RIGHT JOIN 和 FULL JOIN 仅支持 ALL strictness (不支持 SEMI、ANTI、ANY 和 ASOF) 。
使用 partial_merge 算法时,ClickHouse 会对数据进行排序并将其转储到磁盘。ClickHouse 中的 partial_merge 算法与经典实现略有不同。首先,ClickHouse 会按连接键对右表按块排序,并为已排序的块创建 min-max 索引。然后,它会按 join key 对左表的各个部分进行排序,并将其与右表连接。min-max 索引也会用于跳过不需要的右表块。
- direct
direct (也称为 nested loop) 算法使用左表中的行作为键,在右表中执行查找。
它适用于 Dictionary、EmbeddedRocksDB 和 MergeTree 表等特殊存储。
对于 MergeTree 表,该算法会将连接键过滤器直接下推到存储层。如果该键可以利用表的主键索引进行查找,则效率会更高;否则,它会对左表的每个块都对右表执行全表扫描。
支持 INNER 和 LEFT joins,并且仅支持不带其他条件的单列等值连接键。
- auto
auto 时,会先尝试 hash join;如果超出内存限制,则会动态切换到另一种算法。
- full_sorting_merge
- prefer_partial_merge
partial_merge join,否则使用 hash。已弃用,等同于 partial_merge,hash。
- default (deprecated)
direct,hash 相同,即尝试使用 direct join 和 hash join (按此顺序) 。
join_any_take_last_row
ANY strictness 的 join 操作行为。
此设置仅适用于右表使用 Join 表引擎的
JOIN 操作。- 0 — 如果右表中有多行匹配行,则仅连接找到的第一行。
- 1 — 如果右表中有多行匹配行,则仅连接找到的最后一行。
join_default_strictness
ALL— 如果右表有多行匹配,ClickHouse 会基于这些匹配行创建笛卡尔积。这是标准 SQL 中JOIN的常规行为。ANY— 如果右表有多行匹配,则只连接找到的第一行。如果右表只有一行匹配,则ANY和ALL的结果相同。ASOF— 用于连接匹配关系不确定的序列。Empty string— 如果查询中未指定ALL或ANY,ClickHouse 会抛出异常。
join_on_disk_max_files_to_merge
- 从 2 开始的任意正整数。
join_output_by_rowlist_perkey_rows_threshold
join_overflow_mode
THROW— ClickHouse 会抛出异常并中止操作。BREAK— ClickHouse 会中止操作,且不会抛出异常。
THROW。
另请参见
join_runtime_bloom_filter_bytes
enable_join_runtime_filters 设置) 。
join_runtime_bloom_filter_hash_functions
join_runtime_bloom_filter_max_ratio_of_set_bits
join_runtime_filter_blocks_to_skip_before_reenabling
join_runtime_filter_exact_values_limit
join_runtime_filter_pass_ratio_threshold_for_disabling
join_runtime_filter_blocks_to_skip_before_reenabling 个块内将其禁用,以降低开销。
join_to_sort_maximum_table_rows
join_to_sort_minimum_perkey_rows
join_use_nulls
joined_block_split_single_row
max_joined_block_size_rows != 0,此设置才会生效。
将 max_joined_block_size_bytes 与此设置结合使用,有助于避免在数据倾斜、且某些大行在右表中有大量匹配项时出现过高的内存使用。
joined_subquery_requires_alias
kafka_disable_num_consumers_limit
kafka_num_consumers 基于可用 CPU 核心数量的限制。
kafka_max_wait_ms
- 正整数。
- 0 — 无限超时。
keeper_map_strict_mode
keeper_max_retries
keeper_retry_initial_backoff_ms
keeper_retry_max_backoff_ms
least_greatest_legacy_null_behavior
legacy_column_name_of_tuple_literal
lightweight_delete_mode
alter_update- 运行ALTER UPDATE查询,这会创建重量级变更。lightweight_update- 如果可以,则运行轻量级更新;否则运行ALTER UPDATE。lightweight_update_force- 如果可以,则运行轻量级更新;否则抛出异常。
lightweight_deletes_sync
mutations_sync 相同,但仅控制轻量级删除的执行。
可能的值:
| 值 | 说明 |
|---|---|
0 | 变更将异步执行。 |
1 | 查询会等待当前服务器上的轻量级删除完成。 |
2 | 查询会等待所有副本 (如果存在) 上的轻量级删除完成。 |
3 | 查询仅等待活跃副本。仅支持 SharedMergeTree。对于 ReplicatedMergeTree,其行为与 mutations_sync = 2 相同。 |
1。
limit
- 0 — 行数不受限制。
- 正整数。
load_balancing
Random (默认)
最近的主机名
主机名 Levenshtein 距离
nearest_hostname 类似,但它会按 Levenshtein 距离 比较主机名。例如:
按顺序
第一个或随机
first_or_random 算法解决了 in_order 算法的问题。使用 in_order 时,如果一个副本宕机,下一个副本将承受双倍负载,而其余副本仍处理平时数量的流量。使用 first_or_random 算法时,负载会在仍可用的副本之间均匀分配。
可以通过设置 load_balancing_first_offset 显式指定哪个副本是第一个副本。这样就能更灵活地控制在各副本之间重新平衡查询工作负载。
轮询
round_robin 策略的查询计入统计) 。
load_balancing_first_offset
load_marks_asynchronously
1。
local_filesystem_read_method
local_filesystem_read_prefetch
lock_acquire_timeout
DEADLOCK_AVOIDED。
可能的值:
- 正整数 (以秒为单位) 。
- 0 — 不设置锁定超时。
log_comment
log_comment 字段的值,以及服务器日志中的注释文本。
它可用于提高服务器日志的可读性。此外,在运行 clickhouse-test 后,还可帮助从 system.query_log 中筛选出与测试相关的查询。
可能的值:
- 任何长度不超过 max_query_size 的字符串。如果超过 max_query_size,服务器会抛出异常。
log_formatted_queries
formatted_query 列) 。
可能的值:
- 0 — 格式化后的查询不会记录到系统表中。
- 1 — 格式化后的查询会记录到系统表中。
log_processors_profiles
system.processors_profile_log 表。
另请参见:
log_profile_events
log_queries
log_queries_cut_to_length
log_queries_min_query_duration_ms
long_query_time) 。这意味着你将无法在以下表中找到这些查询:
system.query_logsystem.query_thread_log
-
QUERY_FINISH -
EXCEPTION_WHILE_PROCESSING - 类型:毫秒
- 默认值:0 (任何查询)
log_queries_min_type
query_log 中要记录的最小类型。
可能的值:
QUERY_START(=1)QUERY_FINISH(=2)EXCEPTION_BEFORE_START(=3)EXCEPTION_WHILE_PROCESSING(=4)
query_log;例如,如果你只关心错误,则可以使用 EXCEPTION_WHILE_PROCESSING:
log_queries_probability
- 0 — 查询不会记录到系统表中。
- 范围为 [0..1] 的正浮点数。例如,如果设置值为
0.5,则大约一半的查询会记录到系统表中。 - 1 — 所有查询都会记录到系统表中。
log_query_settings
log_query_threads
- 0 — 已禁用。
- 1 — 已启用。
log_query_views
low_cardinality_allow_in_native_format
LowCardinality,ClickHouse server 会在 SELECT 查询中将 LowCardinality 列转换为普通列,并在 INSERT 查询中将普通列转换为 LowCardinality 列。
此设置主要用于不支持 LowCardinality 数据类型的第三方客户端。
可能的值:
- 1 — 不限制使用
LowCardinality。 - 0 — 限制使用
LowCardinality。
low_cardinality_max_dictionary_size
- 任意正整数。
low_cardinality_use_single_dictionary_for_part
low_cardinality_use_single_dictionary_for_part = 1。
可能的值:
- 1 — 禁止为数据分区片段创建多个字典。
- 0 — 不禁止为数据分区片段创建多个字典。
low_priority_query_wait_time_ms
priority) ,低优先级查询会等待更高优先级的查询完成。此设置指定等待的时长。
make_distributed_plan
materialize_skip_indexes_on_insert
materialize_statistics_on_insert
materialize_ttl_after_modify
materialized_views_ignore_errors
materialized_views_squash_parallel_inserts
parallel_view_processing,则 INSERT 查询会在目标表中为每个 max_insert_thread 生成一个 part。
max_analyze_depth
max_ast_depth
目前,这一项不会在解析过程中检查,而只会在查询解析完成后检查。
这意味着,在解析过程中可能会创建出过深的语法树,
但查询会失败。
max_ast_elements
目前不会在解析期间进行检查,而只会在查询解析完成后检查。
这意味着,解析期间仍可能创建出过深的语法树,
但查询会失败。
max_autoincrement_series
generateSerialID 函数创建的序列数量上限。
由于每个序列都对应 Keeper 中的一个节点,建议其数量不要超过几百万个。
max_backup_bandwidth
max_block_size
max_block_size 设置表示从表中加载数据时,单个块建议包含的最大行数。从表中加载的块并不总是会达到 max_block_size:如果 ClickHouse 判断只需读取较少的数据,就会处理更小的块。
块大小不应过小,以避免处理每个块时产生明显开销;也不应过大,以确保带有 LIMIT 子句的查询在处理完第一个块后能够快速执行。设置 max_block_size 时,目标应是避免在多线程提取大量列时占用过多内存,并尽可能保留一定的缓存局部性。
max_bytes_before_external_group_by
GROUP BY 子句的功能。
(请参见 外部内存中的 GROUP BY)
可选值:
- 单个 GROUP BY 操作可使用的最大 RAM 量 (以字节为单位) 。
0— 禁用外部内存中的GROUP BY。
如果 GROUP BY 操作期间的内存使用量超过此阈值 (以字节为单位) ,
则会启用“外部聚合”模式 (将数据落盘) 。建议值为可用系统内存的一半。
max_bytes_before_external_join
join_algorithm 为 hash、parallel_hash、default 或 auto,当右侧数据超过该字节数时,hash join 会自动转换为 grace hash join,以支持落盘到 disk。设为 0 (默认值) 时,此绝对字节阈值会被禁用,但仍可能通过 max_bytes_ratio_before_external_join (默认值为 0.5) 触发自动落盘;将两者都设为 0 可完全禁用自动落盘。它会阻止通过 join 进行按顺序读取优化。
max_bytes_before_external_sort
ORDER BY 子句。请参见 ORDER BY 实现细节。
如果 ORDER BY 操作期间的内存使用量超过此阈值 (以字节为单位) ,则会启用“外部排序”模式 (将数据落盘) 。
可能的值:
- 单个 ORDER BY 操作可使用的最大 RAM 容量 (以字节为单位) 。 建议值为可用系统内存的一半
0— 禁用在外部内存中执行ORDER BY。
max_bytes_before_remerge_sort
max_bytes_for_lazy_final
max_bytes_in_distinct
max_bytes_in_join
- 正整数。
- 0 — 禁用内存控制。
max_bytes_in_set
max_bytes_ratio_before_external_group_by
GROUP BY 使用的可用内存比例。达到该比例后,
聚合将使用外部内存。
例如,如果设置为 0.6,则 GROUP BY 在执行开始时最多可使用 60% 的可用内存
(相对于 server/user/merges 可用的内存) ,之后将
开始使用外部聚合。
max_bytes_ratio_before_external_join
JOIN 使用的可用内存占比。达到该比例后,hash join 会转换为 grace hash join,并将右侧数据落盘。
例如,如果设置为 0.6,则 JOIN 在执行开始时允许右侧哈希表使用可用内存 (对 server/user/merges 可用) 的 60%;之后将开始落盘。
如果同时设置了 max_bytes_before_external_join 和 max_bytes_ratio_before_external_join,则使用两者计算结果中较小的阈值。如果该比例为 0,则仅应用绝对值设置。
仅当 join_algorithm 为 hash、parallel_hash、default 或 auto,且已配置临时数据路径时,此设置才会生效。
max_bytes_ratio_before_external_sort
ORDER BY 使用的可用内存占比。达到该比例后,将使用外部排序。
例如,如果设置为 0.6,则 ORDER BY 在执行开始时最多可使用 60% 的可用内存 (相对于 server/user/merges) ,之后将开始使用外部排序。
请注意,max_bytes_before_external_sort 仍然有效;只有当排序块大于 max_bytes_before_external_sort 时,才会落盘。
max_bytes_to_read
max_bytes_to_read_leaf
max_bytes_to_read=150,则会失败,因为总读取量会达到 200 字节。而设置
max_bytes_to_read_leaf=150 的查询会成功,因为叶子节点最多只会读取 100 字节。
该限制会对每个已处理的数据块进行检查。
此设置在
prefer_localhost_replica=1 时不稳定。max_bytes_to_sort
sort_overflow_mode 决定,
该设置默认值为 throw。
max_bytes_to_transfer
max_columns_to_read
0 表示不受限制。
max_compress_block_size
这是一个专家级设置;如果你刚开始使用 ClickHouse,不建议更改它。
max_concurrent_queries_for_all_users
max_concurrent_queries_for_all_users 为所有用户设置为 99,而数据库管理员可将其自身的值设为 100,以便即使在 server 过载时也能运行用于调查的查询。
为单个查询或用户修改此设置,不会影响其他查询。
可能的值:
- 正整数。
- 0 — 不限制。
1000。
每个用户的最大并发查询数
- 正整数。
- 0 — 无限制。
max_consume_snapshots
max_distributed_connections
max_distributed_depth
- 正整数。
- 0 — 深度无限制。
max_download_buffer_size
max_download_threads
max_estimated_execution_time
timeout_before_checking_execution_speed
到期时,会在每个数据块上检查。
max_execution_speed
timeout_before_checking_execution_speed
超时后,会在每个数据块上进行检查。如果执行速度过高,则会降低执行速度。
max_execution_speed_bytes
timeout_before_checking_execution_speed
到期时,都会在每个数据块上检查一次。如果执行速度过高,则会对其进行限制。
max_execution_time
max_execution_time 参数可能有些难理解。
它的工作方式是根据当前查询的执行速度进行插值估算,
(这种行为由 timeout_before_checking_execution_speed 控制) 。
如果预计执行时间超过指定的 max_execution_time,ClickHouse 将中断该查询。默认情况下,timeout_before_checking_execution_speed
设置为 10 秒。这意味着在查询执行 10 秒后,ClickHouse
会开始估算总执行时间。例如,如果将 max_execution_time
设置为 3600 秒 (1 小时) ,那么当估算出的总执行时间超过
3600 秒这一限制时,ClickHouse 将终止该查询。如果将 timeout_before_checking_execution_speed
设置为 0,ClickHouse 将以实际时钟时间作为 max_execution_time 的判断依据。
如果查询运行时间超过指定秒数,其行为将由
timeout_overflow_mode 决定,默认值为 throw。
只有在数据处理过程中的特定位置才会检查是否超时并停止查询。
目前,在聚合状态合并期间或查询分析期间无法停止,
因此实际运行时间会高于此设置的值。
max_execution_time_leaf
max_execution_time,但它仅
适用于分布式或远程查询的叶子节点。
例如,如果我们希望将叶子节点上的执行时间限制为 10s,但
对起始节点不设限制,那么就不应在嵌套子查询的设置中使用 max_execution_time:
max_execution_time_leaf 用作查询设置:
max_expanded_ast_elements
max_fetch_partition_retries_count
max_final_threads
SELECT 查询在数据读取阶段可使用的最大并行线程数。
可能的值:
- 正整数。
- 0 或 1 — 禁用。
SELECT查询将以单线程执行。
max_http_get_redirects
10.
max_hyperscan_regexp_length
- 正整数。
- 0 — 长度不受限制。
max_hyperscan_regexp_total_length
- 正整数。
- 0 - 长度不受限制。
max_insert_block_size
max_insert_block_size_rows
为插入表而生成的块的最大大小 (按行数计) 。
此设置在以下两种场景中控制块的生成:
-
格式解析:当服务器通过任意接口 (HTTP、带内联数据的 clickhouse-client、gRPC、PostgreSQL wire protocol) 解析基于行的输入格式 (CSV、TSV、JSONEachRow 等) 时,会在以下情况下输出块:
- 同时达到 min_insert_block_size_rows AND min_insert_block_size_bytes,OR
- 达到 max_insert_block_size_rows OR max_insert_block_size_bytes 中的任意一个
-
INSERT 操作:在执行 INSERT queries 期间,以及数据流经 materialized views 时,此设置的行为取决于
use_strict_insert_block_limits:-
启用时:会在以下情况下输出块:
- 最小阈值 (AND) :同时达到 min_insert_block_size_rows AND min_insert_block_size_bytes
- 最大阈值 (OR) :达到 max_insert_block_size_rows OR max_insert_block_size_bytes 中的任意一个
- 禁用时:达到 min_insert_block_size_rows OR min_insert_block_size_bytes 时就会输出块。max_insert_block_size 设置不会生效。
-
启用时:会在以下情况下输出块:
- 正整数。
max_insert_block_size_bytes
- 正整数。
- 0 — 该设置不参与块的生成。
max_insert_delayed_streams_for_parallel_write
50。
max_insert_threads
INSERT SELECT 查询时使用的最大线程数。
可能的值:
- 0 (或 1) —
INSERT SELECT不会并行执行。 - 大于 1 的正整数。
- 8 GiB 内存的节点为
1 - 16 GiB 内存的节点为
2 - 更大规格的节点为
4
SELECT 部分并行执行时,并行 INSERT SELECT 才会生效,请参见 max_threads 设置。
值越大,内存使用量越高。
max_insert_threads_min_free_memory_per_thread
max_threads_min_free_memory_per_thread 相同,但它作用于 max_insert_threads,而不是 max_threads。默认值更高,因为插入管道通常比读取管道为每个线程保留更大的缓冲区 (MergeTree parts、压缩块) 。
如果空闲内存小于 max_insert_threads 与该值的乘积,则会下调 max_insert_threads 以适应可用内存,最少降至 1。
将其设为 0 可禁用此限制。
max_joined_block_size_bytes
max_joined_block_size_rows
max_limit_for_vector_search_queries
max_local_read_bandwidth
max_local_write_bandwidth
max_memory_usage
0 表示无限制。
此设置不考虑可用内存大小,也不考虑机器上的
总内存大小。该限制仅适用于单台
服务器上的单个查询。
你可以使用 SHOW PROCESSLIST 查看每个查询当前的内存占用。
系统会跟踪每个查询的峰值内存占用,并将其写入日志。
对于以下使用 String 和 Array 参数的聚合函数状态,
内存占用无法被完全跟踪:
minmaxanyanyLastargMinargMax
max_memory_usage_for_user
和 max_server_memory_usage 的限制。
max_memory_usage_for_user
max_memory_usage_for_user = 0) 。
另请参阅 max_memory_usage 的说明。
例如,如果要将名为 clickhouse_read 的用户的 max_memory_usage_for_user 设置为 1000 字节,可以使用以下语句
getSetting 函数验证是否生效:
max_network_bandwidth
- 正整数。
- 0 — 禁用带宽控制。
max_network_bandwidth_for_all_users
- 正整数。
- 0 — 禁用数据速率控制。
max_network_bandwidth_for_user
- 正整数。
- 0 — 禁用数据传输速率控制。
max_network_bytes
- 正整数。
- 0 — 禁用数据量限制。
max_number_of_partitions_for_independent_aggregation
max_os_cpu_wait_time_ratio_to_throw
OSCPUWaitMicroseconds 指标) 与忙碌时间 (OSCPUVirtualTimeMicroseconds 指标) 之间的最大比率,作为判断是否拒绝查询的依据。概率通过最小比率与最大比率之间的线性插值计算;在该点处,概率为 1。
max_parallel_replicas
- 正整数。
使用 SAMPLE 键进行并行处理
- 采样键在分区键中的位置不利于高效的范围扫描。
- 向表中添加采样键会降低按其他列过滤的效率。
- 采样键是一个计算开销较高的表达式。
- 集群延迟分布存在长尾,因此查询更多服务器会增加查询的整体延迟。
使用 parallel_replicas_custom_key 进行并行处理
max_parser_backtracks
max_parser_depth
- 正整数。
- 0 — 递归深度不受限制。
max_parsing_threads
max_partition_size_to_drop
0 表示可以不受任何限制地删除分区。
Cloud 默认值:1 TB。
此查询设置会覆盖对应的服务器级设置,参见 max_partition_size_to_drop
max_partitions_per_insert_block
- 正整数。
0— 分区数量不受限制。
max_partitions_per_insert_block,ClickHouse 会根据 throw_on_max_partitions_per_insert_block
记录警告或抛出异常。异常文本如下:
“单个 INSERT 块中的分区过多 (partitions_count 个分区,限制为 ” + toString(max_partitions) + ”) 。
该限制由 ‘max_partitions_per_insert_block’ 设置控制。
使用大量分区是一种常见误区。这会对性能造成严重负面影响,包括 server 启动缓慢、INSERT 查询缓慢
以及 SELECT 查询缓慢。对于一张表,建议分区总数控制在 1000..10000 以内。请注意,
分区并不是为了加速 SELECT 查询 (ORDER BY key 足以让范围查询保持较快) 。
分区是用于数据操作的 (DROP PARTITION 等) 。”
此设置是一个安全阈值,因为使用大量分区是一种常见误区。
max_partitions_to_read
- 正整数
-1- 不限 (默认)
你也可以在表设置中指定 MergeTree 设置
max_partitions_to_read。max_parts_to_move
max_projection_rows_to_use_projection_index
max_query_size
max_query_size 不能在 SQL 查询内部设置 (例如 SELECT now() SETTINGS max_query_size=10000) ,因为 ClickHouse 需要先分配一个 buffer 来解析查询,而该 buffer 的大小由 max_query_size 设置决定;因此,它必须在查询执行前完成配置。max_rand_distribution_parameter
randChiSquared、randStudentT 和 randFisherF 等 random distribution functions 的分布形态参数最大值。此设置可防止参数值过于极端时导致计算时间过长。
max_rand_distribution_trials
randBinomial 和 randNegativeBinomial 等随机分布函数允许的最大试验次数。这可以避免在试验次数很大时导致计算时间过长。
max_read_buffer_size
max_read_buffer_size_local_fs
max_read_buffer_size_remote_fs
max_recursive_cte_evaluation_depth
max_remote_read_network_bandwidth
max_remote_write_network_bandwidth
max_replica_delay_for_distributed_queries
- 正整数。
- 0 — 不检查副本延迟。
SELECT 时使用。
max_result_bytes
max_result_rows
0。
限制结果中的行数。此限制也会应用于子查询,以及在远程服务器上执行分布式查询的各个部分时。
当该值为 0 时,不作限制。
如果达到阈值,查询会在处理完一个数据块后停止,
但不会截断结果中的最后一个块,因此结果大小可能会
超过该阈值。
max_reverse_dictionary_lookup_cache_size_bytes
dictGetKeys 使用的每个查询反向字典查找缓存的最大大小 (以字节为单位) 。该缓存会针对每个属性值存储序列化后的键 Tuple,以避免在同一查询中重复扫描字典。达到上限时,条目会按 LRU 策略逐出。将其设置为 0 可禁用缓存。
max_rows_for_lazy_final
max_rows_in_distinct
行的最大数量。
max_rows_in_join
join_overflow_mode 设置来选择相应操作。
可能的值:
- 正整数。
0— 行数不受限制。
max_rows_in_set
max_rows_in_set_to_optimize_join
- 0 — 禁用。
- 任意正整数。
max_rows_to_group_by
throw,也可以切换
为近似 GROUP BY 模式。
max_rows_to_read
max_rows_to_read_leaf
max_rows_to_read=150,因此会失败,因为总行数为 200。若查询设置 max_rows_to_read_leaf=150,则会成功,因为叶节点最多只会读取 100 行。
该限制会对每个已处理的数据块进行检查。
此设置在
prefer_localhost_replica=1 时属于不稳定状态。max_rows_to_sort
sort_overflow_mode 决定,该值默认设置为 throw。
max_rows_to_transfer
max_sessions_for_user
- 正整数
0- 并发会话数无限制 (默认)
max_size_to_preallocate_for_aggregation
max_size_to_preallocate_for_joins
skip_unavailable_shards 时,该设置用于限制可静默跳过的分片最大数量。
如果不可用分片的数量超过此值,则不会静默跳过,而是抛出异常。
值为 0 表示不设限制 (默认行为——可跳过所有不可用分片) 。
启用 skip_unavailable_shards 时,此设置用于限制可静默跳过的分片最大比例 (0 到 1) 。
如果不可用分片占总分片的比例超过此值,则不会静默跳过,而会抛出异常。
值为 0 表示不设限制 (默认行为——可跳过所有不可用分片) 。
max_streams_for_files_processing_in_cluster_functions
max_streams_for_merge_tree_reading
max_streams_for_union_step
UNION 步骤中同时活跃的数据流数量 (适用于 UNION ALL 和 UNION DISTINCT,因为 UNION DISTINCT 的实现方式是先执行 UNION ALL 步骤,再执行 DISTINCT 步骤) 。当 UNION 查询包含大量子查询时,这些子查询会同时打开各自的读缓冲区,导致内存占用与子查询数量成正比。此设置会插入 Concat 处理器来收窄管道,使同时活跃的流数量最多不超过该值,从而显著降低峰值内存占用。实际限制为该值与 max_threads * max_streams_for_union_step_to_max_threads_ratio 两者中的较小值 (任一值为 0 都表示忽略该值) 。当两者都为 0 时,则不会进行收窄。
max_streams_for_union_step_to_max_threads_ratio
max_threads 后,用于确定 UNION 步骤中同时活跃的流数上限 (同时适用于 UNION ALL 和 UNION DISTINCT) 。实际限制取该计算值与 max_streams_for_union_step 中的较小者 (任一值为 0 都表示忽略该值) 。例如,当 max_threads = 8 且该比率设置为 1 时,最多会有 8 个流同时活跃。将其设置为 0 可禁用基于该比率的限制。
max_streams_multiplier_for_merge_tables
max_streams_to_max_threads_ratio
max_subquery_depth
max_table_size_to_drop
0 表示可以不受任何限制地删除所有表。
Cloud 默认值:1 TB。
此查询设置会覆盖对应的服务器设置,参见 max_table_size_to_drop
max_temporary_columns
0 表示不受限制。
max_temporary_data_on_disk_size_for_query
- 正整数。
0— 无限制 (默认)
max_temporary_data_on_disk_size_for_user
- 正整数。
0— 不限制 (默认)
max_temporary_non_const_columns
max_temporary_columns 类似,它表示执行查询时需要同时保存在 RAM 中的临时列的最大数量,但不包括常量列。
执行查询时经常会生成常量列,但它们几乎不消耗计算资源。
max_threads
WHERE 过滤以及 GROUP BY 的预聚合,那么就会使用 ‘max_threads’。
对于因 LIMIT 而很快完成的查询,可以将 ‘max_threads’ 设置得更低。
例如,如果每个块中都包含所需数量的条目,且 max_threads = 8,那么会读取 8 个块,尽管实际上只读取 1 个块就足够了。
max_threads 的值越小,消耗的内存就越少。
默认情况下,max_threads 设置与 ClickHouse 可用的硬件线程数 (CPU 核心数) 一致。
不过有一种特殊情况:对于 CPU 核心数少于 32 且启用了 SMT (例如 Intel HyperThreading) 的 x86 处理器,ClickHouse 默认使用逻辑核心数 (= 2 x 物理核心数) 。
如果未启用 SMT (例如 Intel HyperThreading) ,则该值对应于 CPU 核心数。
对于 ClickHouse Cloud 用户,默认值会显示为 auto(N),其中 N 与你的服务的 vCPU 规格一致,例如 2vCPU/8GiB、4vCPU/16GiB 等。
所有服务规格的列表可在 Cloud Console 的设置选项卡中查看。
max_threads_for_indexes
max_threads_min_free_memory_per_thread
max_threads,以避免启动很可能触及内存限制的高并行查询。
空闲内存的计算方式为:server 的 max_server_memory_usage 减去当前由全局 memory tracker 跟踪的内存。如果该空闲内存小于 max_threads 与此值的乘积,则会将 max_threads 降低为满足 N * value <= free_memory 的最大 N,且最小值为 1。
将其设置为 0 可禁用此限制。
例如,默认值为 1 GiB 且空闲内存为 32 GiB 时,max_threads 上限为 32;空闲内存为 1 GiB 时,则会回落到 1。
此设置适用于读取侧并行度 (SELECT、UNION、INTERSECT/EXCEPT,以及 INSERT ... SELECT 中的 SELECT 侧) 。对于写入侧,请参见 max_insert_threads_min_free_memory_per_thread。
max_untracked_memory
memory_profiler_step,则实际上会被下调为 memory_profiler_step。
max_wkb_geometry_elements
readWKB 及相关函数解析时,单个 WKB 几何元素中允许包含的点、Ring 或 Polygon 的最大数量。这可防止格式错误的 WKB 数据造成过量内存分配。设置为 0 可使用硬编码限制 (1 亿) 。
memory_overcommit_ratio_denominator
memory_overcommit_ratio_denominator_for_user
memory_profiler_sample_max_allocation_size
memory_profiler_sample_probability 的概率收集大小小于或等于指定值的随机内存分配。0 表示禁用。你可能需要将 max_untracked_memory 设置为 0,以使该阈值按预期生效。
memory_profiler_sample_min_allocation_size
memory_profiler_sample_probability 指定的概率,对大小大于或等于指定值的随机内存分配进行采样收集。0 表示禁用。你可能需要将 max_untracked_memory 设为 0,才能使此阈值按预期生效。
memory_profiler_sample_probability
memory_profiler_sample_min_allocation_size 和 memory_profiler_sample_max_allocation_size 调整) 。请注意,只有在未跟踪内存量超过 ‘max_untracked_memory’ 时才会进行采样。若要获得更细粒度的采样,你可能需要将 ‘max_untracked_memory’ 设置为 0。
memory_profiler_step
- 以字节为单位的正整数。
- 0 表示关闭内存分析器。
memory_tracker_fault_probability
exception safety:在每次分配内存时,都按指定概率抛出异常。
memory_usage_overcommit_max_wait_microseconds
merge_table_max_tables_to_look_for_schema_inference
Merge 表,或使用 merge 表函数时,schema 会推断为匹配表中不超过指定数量的表的并集。
如果表的数量超过该值,则 schema 将根据前指定数量的表进行推断。
merge_tree_coarse_index_granularity
merge_tree_coarse_index_granularity 个子范围,并在这些子范围内递归搜索所需键。
可能的值:
- 任意正偶数。
merge_tree_compact_parts_min_granules_to_multibuffer_read
merge_tree_determine_task_size_by_prewhere_columns
merge_tree_max_bytes_to_use_cache
merge_tree_max_bytes_to_use_cache 字节的数据,则不会使用未压缩块缓存。
未压缩块缓存用于存储查询提取出的数据。ClickHouse 使用此缓存来加快重复小型查询的响应速度。此设置可防止读取大量数据的查询挤占缓存。uncompressed_cache_size 服务器设置定义了未压缩块缓存的大小。
可能的值:
- 任意正整数。
merge_tree_max_rows_to_use_cache
merge_tree_max_rows_to_use_cache 行,则不会使用未压缩块缓存。
未压缩块缓存会存储为查询提取出的数据。ClickHouse 使用此缓存来加快重复执行的小型查询的响应速度。此设置可防止读取大量数据的查询导致该缓存被频繁淘汰。uncompressed_cache_size 服务器设置定义了未压缩块缓存的大小。
可能的值:
- 任意正整数。
merge_tree_min_bytes_for_concurrent_read
merge_tree_min_bytes_for_concurrent_read,ClickHouse 会尝试使用多个线程并发读取该文件。
可能的值:
- 正整数。
merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem
- 正整数。
merge_tree_min_bytes_for_seek
merge_tree_min_bytes_for_seek 字节,ClickHouse 就会顺序读取包含这两个块的文件范围,从而避免额外的寻道操作。
可能的值:
- 任意正整数。
merge_tree_min_bytes_per_task_for_remote_reading
filesystem_prefetch_min_bytes_for_single_read_task
每个任务最少读取的字节数。
merge_tree_min_read_task_size
merge_tree_min_rows_for_concurrent_read
merge_tree_min_rows_for_concurrent_read,ClickHouse 会尝试使用多个线程并发读取该文件。
可能的值:
- 正整数。
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem
- 正整数。
merge_tree_min_rows_for_seek
merge_tree_min_rows_for_seek 行,则 ClickHouse 不会在文件中寻道,而是按顺序读取数据。
可能的值:
- 任意正整数。
merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability
PartsSplitter——以指定概率,在每次从 MergeTree 读取时,将读取范围拆分为相交和不相交两部分。
merge_tree_storage_snapshot_sleep_ms
- 0 - 无延迟 (默认)
- N - 延迟的毫秒数
merge_tree_use_const_size_tasks_for_remote_reading
merge_tree_use_deserialization_prefixes_cache
merge_tree_use_prefixes_deserialization_thread_pool
max_prefixes_deserialization_thread_pool_size 控制。
merge_tree_use_v1_object_and_dynamic_serialization
metrics_perf_events_enabled
metrics_perf_events_list
min_bytes_to_use_direct_io
min_bytes_to_use_direct_io 字节,ClickHouse 就会使用 O_DIRECT 选项从存储磁盘读取数据。
Possible values:
- 0 — 禁用直接 I/O。
- 正整数。
min_bytes_to_use_mmap_io
- 正整数。
- 0 — 读取大文件时,仅使用将数据从内核复制到用户空间的方式。
min_chunk_bytes_for_parallel_parsing
- 类型:无符号整数
- 默认值:1 MiB
min_compress_block_size
min_compress_block_size,就会对其进行压缩。默认值为 65,536。
如果未压缩数据小于 max_compress_block_size,则块的实际大小不会小于该值,也不会小于一个标记对应的数据量。
来看一个示例。假设在创建表时,index_granularity 设置为 8192。
假设写入的是一个 UInt32 类型的列 (每个值 4 字节) 。写入 8192 行时,总数据量为 32 KB。由于 min_compress_block_size = 65,536,因此每两个标记会形成一个压缩块。
假设写入的是一个 URL 列,类型为 String 类型 (每个值平均 60 字节) 。写入 8192 行时,平均数据量会略低于 500 KB。由于这大于 65,536,因此每个标记都会形成一个压缩块。在这种情况下,从磁盘读取单个标记范围内的数据时,不会额外解压其他数据。
这是一个专家级设置;如果你刚开始使用 ClickHouse,则不应更改它。
min_count_to_compile_aggregate_expression
- 正整数。
- 0 — 始终对相同的聚合表达式进行 JIT 编译。
min_count_to_compile_expression
min_count_to_compile_sort_description
min_execution_speed
timeout_before_checking_execution_speed
超时后,会对每个数据块进行检查。如果执行速度低于该值,则会抛出异常。
min_execution_speed_bytes
timeout_before_checking_execution_speed
超时后,会在每个数据块上检查一次。如果执行速度低于该值,则会抛出异常。
min_external_table_block_size_bytes
min_external_table_block_size_rows
min_filtered_ratio_for_lazy_final
min_free_disk_bytes_to_perform_insert
min_free_disk_ratio_to_perform_insert
min_free_disk_space_for_temporary_data
min_hit_rate_to_use_consecutive_keys_optimization
min_insert_block_size_bytes
- 正整数。
- 0 — 该设置不参与块的生成。
min_insert_block_size_bytes_for_materialized_views
INSERT 查询插入表中的块的最小字节数。较小的块会被合并为更大的块。此设置仅适用于插入到 materialized view 的块。调整此设置可以控制推送到 materialized view 时的块合并,并避免过高的内存占用。
可能的值:
- 任意正整数。
- 0 — 禁用合并。
min_insert_block_size_rows
-
格式解析:当 server 通过任意 interface (HTTP、带内联数据的 clickhouse-client、gRPC、PostgreSQL wire protocol) 解析基于行的输入格式 (CSV、TSV、JSONEachRow 等) 时,会在以下情况下输出块:
- 同时达到 min_insert_block_size_rows AND min_insert_block_size_bytes,或者
- 达到 max_insert_block_size_rows OR max_insert_block_size_bytes 之一
-
INSERT 操作:在执行 INSERT 查询以及数据流经 materialized view 时,此设置的行为取决于
use_strict_insert_block_limits:-
启用时:会在以下情况下输出块:
- 最小阈值 (AND) :同时达到 min_insert_block_size_rows AND min_insert_block_size_bytes
- 最大阈值 (OR) :达到 max_insert_block_size_rows OR max_insert_block_size_bytes 之一
- 禁用时 (默认) :当达到 min_insert_block_size_rows OR min_insert_block_size_bytes 之一时,就会输出块。不强制应用 max_insert_block_size 设置。
-
启用时:会在以下情况下输出块:
- 正整数。
- 0 — 此设置不参与块的生成。
min_insert_block_size_rows_for_materialized_views
INSERT 查询插入到表中的块所需的最小行数。较小的块会合并成更大的块。此设置仅适用于插入到 materialized view 的块。调整此设置后,您可以控制推送到 materialized view 时的块合并,从而避免过高的内存使用量。
可能的值:
- 任意正整数。
- 0 — 禁用块合并。
min_joined_block_size_bytes
min_joined_block_size_rows
min_os_cpu_wait_time_ratio_to_throw
OSCPUWaitMicroseconds 指标) 与忙碌时间 (OSCPUVirtualTimeMicroseconds 指标) 之间的最小比率,作为考虑拒绝查询的阈值。系统会使用最小比率与最大比率之间的线性插值来计算概率,在该点处概率为 0。
min_outstreams_per_resize_after_split
Resize 或 StrictResize 处理器的最小输出流数量。如果最终得到的流数量小于该值,则不会进行 split 操作。
什么是 Resize 节点
Resize 节点是查询管道中的一种处理器,用于调整管道中数据流的数量。它既可以增加,也可以减少流的数量,以便在多个线程或处理器之间平衡工作负载。例如,如果某个查询需要更高的并行度,Resize 节点可以将单个流拆分为多个流。反过来,它也可以将多个流合并为更少的流,以集中处理数据。
Resize 节点可确保数据在各个流之间均匀分布,同时保持数据块的结构。这有助于优化资源利用率并提升查询性能。
为什么需要拆分 Resize 节点
Resize 节点,其 ExecutingGraph::Node::status_mutex 会发生严重争用,尤其是在高核心数环境下。这种争用会导致:
- ExecutingGraph::updateNode 的延迟增加,直接影响查询性能。
- 大量 CPU 周期浪费在自旋锁争用 (native_queued_spin_lock_slowpath) 上,导致效率下降。
- CPU 利用率降低,从而限制并行度和吞吐量。
Resize 节点如何拆分
- 首先会检查输出流的数量,以确保可以执行拆分:拆分后每个处理器的输出流数量都达到或超过
min_outstreams_per_resize_after_split阈值。 Resize节点会被拆分为多个更小的Resize节点,这些节点的端口数量相同,每个节点分别处理一部分输入流和输出流。- 每个组都会独立处理,从而减少锁竞争。
具有任意输入/输出的 Resize 节点拆分
Resize 节点数量整除,部分输入会连接到 NullSource,部分输出会连接到 NullSink。这样就能在不影响整体数据流的情况下完成拆分。
设置的作用
min_outstreams_per_resize_after_split 设置可确保对 Resize 节点的拆分确有意义,并避免创建过少的流,否则可能导致并行处理效率低下。通过强制规定最少输出流数量,该设置有助于在并行度与开销之间保持平衡,从而在涉及流拆分与合并的场景中优化查询执行。
禁用此设置
Resize 节点的拆分,请将此设置设为 0。这样可防止在生成管道时拆分 Resize 节点,使其保持原有结构,而不会再被拆分为更小的节点。
min_table_rows_to_use_projection_index
mongodb_throw_on_unsupported_query
allow_experimental_analyzer=0 时,此选项不适用。
move_all_conditions_to_prewhere
move_primary_key_columns_to_end_of_prewhere
multiple_joins_try_to_keep_original_names
mutations_execute_nondeterministic_on_initiator
now() 函数) 会在 initiator 上执行,并在 UPDATE 和 DELETE 查询中替换为字面量。这有助于在使用常量非确定性函数执行变更时,保持各副本上的数据同步。默认值:false。
mutations_execute_subqueries_on_initiator
UPDATE 和 DELETE 查询中将其替换为字面量。默认值:false。
mutations_max_literal_size_to_replace
UPDATE 和 DELETE 查询中可用于替换的序列化字面量的最大大小 (以字节为单位) 。仅当上述两个设置中至少有一个启用时,此设置才会生效。默认值:16384 (16 KiB) 。
mutations_sync
ALTER TABLE ... UPDATE|DELETE|MATERIALIZE INDEX|MATERIALIZE PROJECTION|MATERIALIZE COLUMN|MATERIALIZE STATISTICS 查询 (变更) 。
可能的值:
| 值 | 描述 |
|---|---|
0 | 变更将异步执行。 |
1 | 查询会等待当前服务器上的所有变更完成。 |
2 | 查询会等待所有副本 (如果存在) 上的全部变更完成。 |
3 | 查询仅等待活跃副本。仅 SharedMergeTree 支持。对于 ReplicatedMergeTree,其行为与 mutations_sync = 2 相同。 |
mysql_datatypes_support_level
decimal、datetime64、date2Date32 或 date2String 任意组合而成。默认启用所有现代映射 (decimal、datetime64、date2Date32) 。
decimal:在精度允许的情况下,将NUMERIC和DECIMAL类型转换为Decimal。datetime64:当精度不为0时,将DATETIME和TIMESTAMP类型转换为DateTime64,而不是DateTime。date2Date32:将DATE转换为Date32,而不是Date。其优先级高于date2String。date2String:将DATE转换为String,而不是Date。会被datetime64覆盖。
mysql_map_fixed_string_to_text_in_show_columns
TEXT。
仅在通过 MySQL wire 协议建立连接时生效。
- 0 - 使用
BLOB。 - 1 - 使用
TEXT。
mysql_map_string_to_text_in_show_columns
TEXT。
仅在通过 MySQL wire 协议建立连接时生效。
- 0 - 使用
BLOB。 - 1 - 使用
TEXT。
mysql_max_rows_to_insert
network_compression_method
NONE— 不压缩。LZ4— 使用 LZ4 编解码器。LZ4HC— 使用 LZ4HC 编解码器。ZSTD— 使用 ZSTD 编解码器。
network_zstd_compression_level
ZSTD 时生效。
可能的值:
- 1 到 15 的正整数。
normalize_function_names
number_of_mutations_to_delay
number_of_mutations_to_throw
odbc_bridge_connection_pool_size
odbc_bridge_use_connection_pooling
offset
- 0 — 不跳过任何行。
- 正整数。
opentelemetry_start_keeper_trace_probability
- ‘auto’ - 等同于
opentelemetry_start_trace_probability设置 - 0 — 禁用追踪
- 0 到 1 — 概率 (例如,1.0 = 始终启用)
opentelemetry_start_trace_probability
- 0 — 禁用所有已执行查询的 trace (如果未提供父 trace context) 。
- 范围为 [0..1] 的正浮点数。例如,如果该设置值为
0,5,则 ClickHouse 平均会为一半的查询启动 trace。 - 1 — 启用所有已执行查询的 trace。
opentelemetry_trace_cpu_scheduling
opentelemetry_trace_processors
optimize_aggregation_in_order
- 0 —
GROUP BY优化已禁用。 - 1 —
GROUP BY优化已启用。
optimize_aggregators_of_group_by_keys
optimize_and_compare_chain
<、<=、>、>=、= 及其混合使用。例如,(a < b) AND (b < c) AND (c < 5) 将变为 (a < b) AND (b < c) AND (c < 5) AND (b < 5) AND (a < 5)。
optimize_append_index
false。
可能的值:
- true, false
optimize_arithmetic_operations_in_aggregate_functions
optimize_const_name_size
- 正整数 - 名称的最大长度,
- 0 — 始终,
- 负整数 - 从不。
optimize_count_from_files
file/s3/url/hdfs/azureBlobStorage。
可能的值:
- 0 — 禁用该优化。
- 1 — 启用该优化。
optimize_dictget_tuple_element
tupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2) 重写为 dictGet('dict', 'b', key),以避免拉取不必要的字典属性。支持按位置 (.1、.2、…) 和按名称 (.b) 访问;也适用于 dictGetOrDefault,前提是默认参数为常量 Tuple,或由常量组成的 tuple(...)。
optimize_distinct_in_order
optimize_distributed_group_by_sharding_key
GROUP BY sharding_key 查询 (这会减少该查询在发起端服务器上的内存使用量) 。
支持以下类型的查询 (以及它们的任意组合) :
SELECT DISTINCT [..., ]sharding_key[, ...] FROM distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
- 0 — 已禁用。
- 1 — 已启用。
目前它要求启用
optimize_skip_unused_shards (这是因为将来它可能会默认启用,而只有在数据通过 Distributed 表插入,即数据按照 sharding_key 分布时,它才能正确工作) 。optimize_dry_run_check_part
OPTIMIZE ... DRY RUN 会使用 checkDataPart 验证生成的合并后分片。如果检查失败,则会抛出异常。
optimize_empty_string_comparisons
col = '' 或 '' = col 之类的表达式转换为 empty(col),并将 col != '' 或 '' != col 转换为 notEmpty(col),
仅在 col 为 String 或 FixedString 类型时执行此转换。
optimize_extract_common_expressions
(A AND B) OR (A AND C) 这样的逻辑表达式可以改写为 A AND (B OR C),这可能有助于利用:
- 简单过滤表达式中的索引
- cross join 到 inner join 的优化
optimize_functions_to_subcolumns
- length 转换为读取 size0 子列。
- empty 转换为读取 size0 子列。
- notEmpty 转换为读取 size0 子列。
- isNull 转换为读取 null 子列。
- isNotNull 转换为读取 null 子列。
- count 转换为读取 null 子列。
- mapKeys 转换为读取 keys 子列。
- mapValues 转换为读取 values 子列。
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_group_by_constant_keys
optimize_group_by_function_keys
optimize_if_chain_to_multiif
optimize_if_transform_strings_to_enum
optimize_injective_functions_in_group_by
optimize_injective_functions_inside_uniq
optimize_inverse_dictionary_lookup
optimize_min_equality_disjunction_chain_length
expr = x1 OR ... expr = xN 进行优化的最小长度
optimize_min_inequality_conjunction_chain_length
expr <> x1 AND ... expr <> xN 的最小长度
optimize_move_to_prewhere
- 0 — 禁用自动
PREWHERE优化。 - 1 — 启用自动
PREWHERE优化。
optimize_move_to_prewhere_if_final
- 0 — 在带有
FINAL修饰符的SELECT查询中,自动PREWHERE优化已禁用。 - 1 — 在带有
FINAL修饰符的SELECT查询中,自动PREWHERE优化已启用。
optimize_multiif_to_if
multiIf 替换为 if。
optimize_normalize_count_variants
optimize_on_insert
- 0 — 禁用。
- 1 — 启用。
optimize_or_like_chain
optimize_qbit_distance_function_reads
QBit 数据类型上的距离函数替换为等效函数,使其仅从存储中读取计算所需的列。
optimize_read_in_order
- 0 — 禁用
ORDER BY优化。 - 1 — 启用
ORDER BY优化。
optimize_redundant_functions_in_order_by
optimize_respect_aliases
optimize_rewrite_aggregate_function_with_if
if 表达式的 aggregate functions 进行重写。
例如,avg(if(cond, col, null)) 可以重写为 avgOrNullIf(cond, col)。这可能会提升性能。
仅在启用 analyzer (
enable_analyzer = 1) 时支持。optimize_rewrite_array_exists_to_has
optimize_rewrite_like_perfect_affix
col LIKE 'ClickHouse%') 重写为 startsWith 或 endsWith 函数 (例如 startsWith(col, 'ClickHouse')) 。
optimize_rewrite_regexp_functions
optimize_rewrite_sum_if_to_count_if
optimize_skip_merged_partitions
OPTIMIZE TABLE ... FINAL SETTINGS optimize_skip_merged_partitions=1
OPTIMIZE TABLE ... FINAL 查询也会重写该 part。
可能的值:
- 1 - 启用优化。
- 0 - 禁用优化。
optimize_skip_unused_shards
WHERE/PREWHERE 中包含分片键条件的 SELECT 查询启用或禁用跳过未使用分片,并启用分布式查询的相关优化 (例如按分片键进行聚合) 。
前提是数据按分片键进行分布,否则查询结果会不正确。
- 0 — 禁用。
- 1 — 启用。
optimize_skip_unused_shards_limit
optimize_skip_unused_shards。
值过多可能需要消耗大量资源进行处理,而实际收益未必明显,因为如果 IN (...) 中包含大量值,查询很可能最终仍会发送到所有分片。
optimize_skip_unused_shards_nesting
optimize_skip_unused_shards 的生效嵌套层级 (因此仍需启用 optimize_skip_unused_shards) 。这适用于分布式查询存在嵌套的情况 (例如,一个 Distributed 表查询另一个 Distributed 表) 。
可能的值:
- 0 — 禁用,
optimize_skip_unused_shards始终生效。 - 1 — 仅在第一层启用
optimize_skip_unused_shards。 - 2 — 在最多两层内启用
optimize_skip_unused_shards。
optimize_skip_unused_shards_rewrite_in
optimize_skip_unused_shards) 。
可选值:
- 0 — 已禁用。
- 1 — 已启用。
optimize_sorting_by_input_stream_properties
optimize_substitute_columns
false。
可能的值:
- true, false
optimize_syntax_fuse_functions
- 0 — 参数相同的函数不会融合。
- 1 — 参数相同的函数会融合。
optimize_throw_if_noop
OPTIMIZE 没有执行任何操作,也会成功返回。通过此设置,您可以区分这些情况,并在异常消息中获取原因。
可能的值:
- 1 — 启用抛出异常。
- 0 — 禁用抛出异常。
optimize_time_filter_with_preimage
toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')
optimize_trivial_approximate_count_query
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_count_query
SELECT count() FROM table 的优化。如果需要使用行级安全,请禁用此设置。
可能的值:
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_group_by_limit_query
max_rows_to_group_by = n + offset 和 group_by_overflow_mode = 'any',启用或禁用对简单查询 SELECT key_expr FROM table GROUP BY key_expr LIMIT n 的优化 (即投影中不包含聚合函数、没有 HAVING/ORDER BY/LIMIT BY/窗口子句,且没有 GROUP BY 修饰符) 。生成 n + offset 个不同键后,聚合即会停止。
如果用户已显式将 group_by_overflow_mode 设为非 any 值 (以保留其显式指定的 throw/break 语义) ,或者用户已设置了更严格的 max_rows_to_group_by (此时该优化将成为空操作) ,则不会应用此优化。
可能的值:
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_insert_select
optimize_truncate_order_by_after_group_by_keys
optimize_uniq_to_count
optimize_use_implicit_projections
optimize_use_projection_filtering
optimize_use_projections
allow_experimental_projection_optimization
启用或禁用在处理 SELECT 查询时的投影优化。
可能的值:
- 0 — 投影优化已禁用。
- 1 — 投影优化已启用。
optimize_using_constraints
false。
可能的值:
- true, false
os_threads_nice_value_materialized_view
os_threads_nice_value_query
os_thread_priority
用于查询处理线程的 Linux nice 值。值越低,CPU 优先级越高。
需要具备 CAP_SYS_NICE 能力,否则为空操作。
可能的值:-20 到 19。
page_cache_block_size
page_cache_inject_eviction
page_cache_lookahead_blocks
page_cache_max_coalesced_bytes
readBigAt 填充用户态页缓存时,连续的缓存未命中会被合并为一次对底层存储的读取。此设置以字节为单位限制单次合并读取的大小;更长的未命中序列会被拆分为多次读取。它可限制并行冷读期间临时缓冲区的瞬时内存使用量。
较高的值可减少对象存储冷扫描时的 HTTP 请求数;较低的值可降低瞬时内存峰值占用。
paimon_target_snapshot_id
parallel_distributed_insert_select
INSERT ... SELECT 查询。
如果执行 INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b 查询,且两个表使用同一个集群,并且两个表要么都是复制表,要么都是非复制表,则该查询会在每个分片上本地执行。
可选值:
0— 禁用。1—SELECT将在每个分片上针对分布式引擎的底层表执行。2—SELECT和INSERT将在每个分片上分别针对分布式引擎的底层表执行读写。
ReplicatedMergeTree 或 SharedMergeTree 的 INSERT ... SELECT 也可以在副本间并行执行。要启用此功能:
parallel_distributed_insert_select = 2enable_parallel_replicas = 1
parallel_hash_join_threshold
hash 还是 parallel_hash (仅在能够估算右侧表大小时) 。
如果已知右侧表的大小低于该阈值,则使用前者。
parallel_non_joined_rows_processing
parallel_hash join algorithm 处理大表时,这可以加快未 JOIN 阶段的处理速度。
禁用后,未 JOIN 的行将由单个线程处理。
parallel_replica_offset
parallel_replicas_allow_in_with_subquery
parallel_replicas_allow_materialized_views
parallel_replicas_allow_view_over_mergetree
MergeTree 表的简单视图执行外层查询 (而非视图的内层查询) ,从而提升跨节点并行执行的效果。此设置也适用于 UNION ALL 视图,前提是其所有分支都从不同的 MergeTree 表读取。
parallel_replicas_connect_timeout_ms
parallel_replicas_count
parallel_replicas_custom_key
SAMPLE 键相同,即会使用每个分片的多个副本。
parallel_replicas_custom_key_range_lower
range 类型的过滤器基于自定义范围 [parallel_replicas_custom_key_range_lower, INT_MAX],在各副本之间均匀分配工作。
与 parallel_replicas_custom_key_range_upper 结合使用时,该过滤器可针对范围 [parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper] 在各副本之间均匀分配工作。
注意:此设置不会在查询处理期间额外过滤任何数据,而是会改变范围过滤器为并行处理拆分范围 [0, INT_MAX] 时的分割点。
parallel_replicas_custom_key_range_upper
range 类型的过滤器基于自定义范围 [0, parallel_replicas_custom_key_range_upper],在各个副本之间均匀分配工作。值为 0 时会禁用上界,并将其设为自定义键表达式的最大值。
与 parallel_replicas_custom_key_range_lower 结合使用时,它可让过滤器在范围 [parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper] 内将工作均匀分配到各个副本。
注意:此设置不会在查询处理期间额外过滤任何数据,而只会改变范围过滤器为并行处理拆分 [0, INT_MAX] 范围时的分界点
parallel_replicas_filter_pushdown
parallel_replicas_for_cluster_engines
parallel_replicas_for_non_replicated_merge_tree
parallel_replicas_index_analysis_only_on_coordinator
parallel_replicas_insert_select_local_pipeline
parallel_replicas_local_plan
parallel_replicas_mark_segment_size
parallel_replicas_min_number_of_rows_per_replica
parallel_replicas_mode
parallel_replicas_only_with_analyzer
parallel_replicas_prefer_local_join
parallel_replicas_prefer_local_replica
max_parallel_replicas = 1 的查询就可以被路由到其他主机;当大量短查询分布在集群中时,这有助于提升缓存局部性。
parallel_replicas_support_projection
parallel_view_processing
parallelize_output_from_storages
parsedatetime_e_requires_space_padding
parseDateTime 中的格式说明符 ‘%e’ 要求个位数的日期以空格补齐,例如可接受 ’ 2’,而 ‘2’ 会报错。
parsedatetime_parse_without_leading_zeros
parseDateTime 中的格式说明符 %c、%l 和 %k 可解析不带前导零的月份和小时。
partial_merge_join_left_table_buffer_bytes
partial_merge_join_rows_in_right_blocks
- 将右侧 join 数据拆分为多个块,每个块最多包含指定数量的行。
- 使用每个块的最小值和最大值为其建立索引。
- 如果可能,将已准备好的块卸载到磁盘。
- 任意正整数。建议取值范围:[1000, 100000]。
partial_result_on_first_cancel
parts_to_delay_insert
parts_to_throw_insert
per_part_index_stats
poll_interval
polyglot_dialect
postgresql_connection_attempt_timeout
connect_timeout 参数传递。
postgresql_connection_pool_auto_close_connection
postgresql_connection_pool_retries
postgresql_connection_pool_size
postgresql_connection_pool_wait_timeout
postgresql_fault_injection_probability
predicate_statistics_sample_rate
system.predicate_statistics_log 中。设置为 N > 0 时,约有 1/N 的查询 (按查询 ID) 会被采样。0 表示禁用。
prefer_column_name_to_alias
- 0 — 列名会被替换为别名。
- 1 — 列名不会被替换为别名。
prefer_external_sort_block_bytes
prefer_global_in_and_join
IN/JOIN 运算符替换为 GLOBAL IN/GLOBAL JOIN。
可能的值:
- 0 — 已禁用。
IN/JOIN运算符不会被替换为GLOBAL IN/GLOBAL JOIN。 - 1 — 已启用。
IN/JOIN运算符会被替换为GLOBAL IN/GLOBAL JOIN。
SET distributed_product_mode=global 可以改变分布式表的查询行为,但它不适用于本地表或来自外部资源的表。这时,prefer_global_in_and_join 设置就派上用场了。
例如,我们有一些提供查询服务的节点,其中包含不适合做分布式处理的本地表。我们需要在分布式处理过程中借助 GLOBAL 关键字即时分散这些表中的数据——即使用 GLOBAL IN/GLOBAL JOIN。
prefer_global_in_and_join 的另一个使用场景是访问由 external engine 创建的表。该设置有助于减少连接这类表时对外部源的调用次数:每个查询只需调用一次。
另请参见:
- 分布式子查询 ,了解如何使用
GLOBAL IN/GLOBAL JOIN的更多信息
prefer_localhost_replica
- 1 — 如果存在 localhost 副本,ClickHouse 始终会将查询发送到该副本。
- 0 — ClickHouse 使用 load_balancing 设置中指定的负载均衡策略。
如果你在未使用 parallel_replicas_custom_key 的情况下使用了 max_parallel_replicas,请禁用此设置。
如果设置了 parallel_replicas_custom_key,则只有在它用于包含多个分片且每个分片都有多个副本的集群时,才应禁用此设置。
如果它用于仅有一个分片但有多个副本的集群,禁用此设置会带来负面影响。
prefer_warmed_unmerged_parts_seconds
preferred_block_size_bytes
max_block_size 设置的进一步微调。如果列较大,并且按 max_block_size 的行数生成的块大小很可能超过指定字节数,则会减小块大小,以提高 CPU 缓存局部性。
preferred_max_column_in_block_size_bytes
preferred_optimize_projection_name
- String:首选投影的名称
prefetch_buffer_size
print_pretty_type_names
DESCRIBE 查询和 toTypeName() 函数中,以带缩进的更易读方式输出深层嵌套的类型名称。
示例:
优先级
promql_database
promql 方言使用的数据库名称。空字符串表示当前数据库。
promql_evaluation_time
evaluation_time
设置 promql 方言使用的求值时间。auto 表示当前时间。
promql_table
promql 方言所使用的 TimeSeries 表名称。
push_external_roles_in_interserver_queries
query_cache_compress_entries
- 0 - 已禁用
- 1 - 已启用
query_cache_for_subqueries
use_query_cache 传递到所有子查询。
可能的值:
- 0 - 已禁用
- 1 - 已启用
query_cache_max_entries
- 大于或等于 0 的整数。
query_cache_max_size_in_bytes
- 大于等于 0 的整数。
query_cache_min_query_duration
- 非负整数 >= 0。
query_cache_min_query_runs
SELECT 查询的结果在存储到 query cache 之前,至少需要运行的次数。
可能的值:
- 大于等于 0 的整数。
query_cache_nondeterministic_function_handling
rand() 或 now() 等非确定性函数的 SELECT 查询。
可选值:
'throw'- 抛出异常,并且不缓存查询结果。'save'- 缓存查询结果。'ignore'- 不缓存查询结果,也不抛出异常。
SELECT 查询结果可被其他用户读取。
出于安全考虑,不建议启用此设置。
可能的值:
- 0 - 已禁用
- 1 - 已启用
query_cache_squash_partial_results
- 0 - 已禁用
- 1 - 已启用
query_cache_system_table_handling
SELECT 查询,即数据库 system.* 和 information_schema.* 中的表。
可能的值:
'throw'- 抛出异常,并且不缓存查询结果。'save'- 缓存查询结果。'ignore'- 不缓存查询结果,也不抛出异常。
query_cache_tag
- 任意字符串
query_cache_ttl
- 正整数 >= 0。
query_metric_log_interval
collect_interval_milliseconds 值;如果不存在,则默认使用 1000。
要禁用单个查询的收集,请将 query_metric_log_interval 设为 0。
默认值:-1
query_plan_aggregation_in_order
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_convert_any_join_to_semi_or_anti_join
query_plan_convert_join_to_in
JOIN 转换为带 IN 的子查询。对于非 ANY JOIN (例如默认的 ALL JOIN) ,这可能导致结果错误。
query_plan_convert_outer_join_to_inner_join
JOIN 之后的过滤器始终会过滤掉默认值,则允许将 OUTER JOIN 转换为 INNER JOIN
query_plan_direct_read_from_text_index
query_plan_display_internal_aliases
query_plan_enable_multithreading_after_window_functions
query_plan_enable_optimizations
这是一个专家级设置,仅应由开发人员在调试时使用。该设置未来可能会以不向后兼容的方式发生变化,或被移除。
- 0 - 禁用查询计划层的所有优化
- 1 - 启用查询计划层的优化 (但各项单独优化仍可通过各自的设置禁用)
query_plan_execute_functions_after_sorting
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式发生变化,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_filter_push_down
这是一个专家级设置,仅应由开发人员用于调试。该设置今后可能会以不向后兼容的方式发生变化,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_join_shard_by_pk_ranges
hash、parallel_hash 和 full_sorting_merge 算法。通常不会提升查询速度,但可能会降低内存消耗。
query_plan_join_swap_table
ALL join strictness 和 JOIN ON clause。可能的值为:
- ‘auto’:由 planner 决定使用哪张表作为构建表。
- ‘false’:从不交换表 (右表为构建表) 。
- ‘true’:始终交换表 (左表为构建表) 。
query_plan_lift_up_array_join
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会发生不向后兼容的变更,也可能被移除。
- 0 - 禁用
- 1 - 启用
query_plan_lift_up_union
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式发生变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_max_limit_for_lazy_materialization
query_plan_max_limit_for_top_k_optimization
query_plan_max_optimizations_to_apply
这是一个专家级设置,仅应由开发人员在调试时使用。该设置将来可能会以不向后兼容的方式发生变更,或者被移除。
query_plan_max_step_description_length
query_plan_merge_expressions
这是一个专家级设置,仅应供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_merge_filter_into_join_condition
JOIN 条件中,并将 CROSS JOIN 转换为 INNER。
query_plan_merge_filters
query_plan_optimize_join_order_algorithm
- ‘greedy’ - 基础贪心算法 - 速度快,但不一定能生成最佳的 JOIN 顺序
- ‘dpsize’ - 实现了 DPsize 算法,目前仅适用于 Inner JOIN - 会考虑所有可能的 JOIN 顺序,并找出最优方案,但对于包含大量表和 JOIN 谓词的查询,速度可能较慢。 可以指定多个算法,例如 ‘dpsize,greedy’。
query_plan_optimize_join_order_limit
query_plan_optimize_join_order_randomize
query_plan_optimize_lazy_final
query_plan_optimize_lazy_materialization
query_plan_optimize_prewhere
query_plan_push_down_limit
这是一个专家级设置,仅供开发人员在调试时使用。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应由开发者在调试时使用。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order_through_join
query_plan_remove_redundant_distinct
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应由开发人员在调试时使用。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_remove_redundant_sorting
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发者用于调试。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_remove_unused_columns
这是一个专家级设置,仅应由开发人员用于调试。该设置未来可能会以不向后兼容的方式发生变化,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_reuse_storage_ordering_for_window_functions
optimize_read_in_window_order
控制是否启用一项查询计划级别的优化:在为窗口函数进行排序时复用存储排序顺序。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_split_filter
这是一个专家级设置,仅应供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_text_index_add_hint
query_plan_top_k_through_join
ORDER BY ... LIMIT n 下推到连接之前。这会限制保留侧输入在执行连接前需要产生的行数。
仅当设置 query_plan_enable_optimizations 为 1 时才生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_try_use_vector_search
query_plan_enable_optimizations 为 1 时,此设置才会生效。
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_profiler_cpu_time_period_ns
-
以纳秒为单位的正整数。
推荐值:
- 对于单个查询,建议设为 10000000 (每秒 100 次) 纳秒或更大。
- 对于集群级性能分析,建议设为 1000000000 (每秒一次) 。
- 0 表示关闭计时器。
- 系统表 trace_log
query_profiler_real_time_period_ns
-
以纳秒为单位的正整数。
推荐值:
- 对于单个查询,
10000000(每秒 100 次) 纳秒及更低的值。 - 对于集群级性能分析,
1000000000(每秒一次) 。
- 对于单个查询,
-
0表示关闭计时器。
- 系统表 trace_log
3000000000。
queue_max_wait_ms
rabbitmq_max_wait_ms
read_backoff_max_throughput
read_backoff_min_concurrency
read_backoff_min_events
read_backoff_min_interval_between_events_ms
read_backoff_min_latency_ms
read_from_distributed_cache_if_exists_otherwise_bypass_cache
read_from_filesystem_cache_if_exists_otherwise_bypass_cache
read_from_page_cache_if_exists_otherwise_bypass_cache
read_from_filesystem_cache_if_exists_otherwise_bypass_cache。
read_in_order_two_level_merge_threshold
read_in_order_use_buffering
read_in_order_use_virtual_row
read_in_order_use_virtual_row_per_block
read_in_order_use_virtual_row 一起启用时,在读取完每个块后都会发出一个虚拟行 (而不只是每个 part 的开头) 。
这使 MergingSortedTransform 能够更频繁地重新调整数据源的优先级,这在下游过滤器丢弃了大量行,且数据在各个 part 之间分布不均时尤其有用。
请注意,这会禁用读取时的 read_in_order_use_buffering 优化和预合并 (read_in_order_two_level_merge_threshold) 。
read_overflow_mode
read_overflow_mode_leaf
throw:抛出异常 (默认) 。break:停止执行查询并返回部分结果。
read_priority
threadpool method。
read_through_distributed_cache
readonly
readonly 设置除外。
receive_data_timeout_ms
receive_timeout
send_timeout 也会在服务器端对应连接的另一端设置。
recursive_cte_max_steps_in_type_inference
getLeastSupertype,直到收敛为止。设置为 0 可禁用类型扩宽,并且仅使用非递归部分的类型。
regexp_dict_allow_hyperscan
regexp_dict_flag_case_insensitive
regexp_dict_flag_dotall
. 匹配换行符。
regexp_max_matches_per_row
- 正整数。
reject_expensive_hyperscan_regexps
remerge_sort_lowered_memory_bytes_ratio
remote_filesystem_read_method
remote_filesystem_read_prefetch
remote_fs_read_backoff_max_tries
remote_fs_read_max_backoff_ms
remote_read_min_bytes_for_seek
rename_files_after_processing
- 类型: String
- 默认值: 空字符串
file 表函数处理的文件指定重命名模式。设置此选项后,file 表函数读取的所有文件都会按包含占位符的指定模式重命名,但仅在文件处理成功时才会执行重命名。
占位符
%a— 完整的原始文件名 (例如 “sample.csv”) 。%f— 不含扩展名的原始文件名 (例如 “sample”) 。%e— 包含点号的原始文件扩展名 (例如 “.csv”) 。%t— 时间戳 (以微秒为单位) 。%%— 百分号 (”%”) 。
示例
-
选项:
--rename_files_after_processing="processed_%f_%t%e" -
查询:
SELECT * FROM file('sample.csv')
sample.csv 读取成功,文件将重命名为 processed_sample_1683473210851438.csv
replace_running_query
query_id 参数。它可以是任意字符串,用作查询标识符。
如果此时同一用户已存在具有相同 query_id 的查询,则其行为取决于 replace_running_query 参数。
0 (默认) – 抛出异常 (如果具有相同 query_id 的查询已在运行,则不允许该查询运行) 。
1 – 取消旧查询并开始运行新查询。
将此参数设置为 1,可用于实现分段条件建议功能。输入下一个字符后,如果旧查询尚未完成,则应将其取消。
replace_running_query_max_wait_ms
query_id 的正在运行中的查询结束的时间。
可能的值:
- 正整数。
- 0 — 抛出异常;如果服务器已在执行具有相同
query_id的查询,则不允许运行新的查询。
replication_wait_for_inactive_replica_timeout
ALTER、OPTIMIZE 或 TRUNCATE 查询的时间长度 (以秒为单位) 。
可能的值:
0— 不等待。- 负整数 — 无限期等待。
- 正整数 — 等待的秒数。
restore_replace_external_dictionary_source_to_null
restore_replace_external_engines_to_null
restore_replace_external_table_functions_to_null
1。
result_overflow_mode
throw
设置当结果量超过某一限制时应如何处理。
可能的值:
throw:抛出异常 (默认值) 。break:停止执行查询并返回部分结果,就像 源数据已经耗尽一样。
Break 仅会在
块级别中断执行。这意味着返回的行数会大于
max_result_rows,是 max_block_size
的倍数,并且取决于 max_threads。
示例
Query
Result
rewrite_count_distinct_if_with_count_distinct_implementation
countDistcintIf。
可能的值:
- true — 允许。
- false — 不允许。
rewrite_in_to_join
x IN subquery 的表达式重写为 JOIN。这可能有助于通过 JOIN 重排序优化整个查询。
rows_before_aggregation
s3_allow_multipart_copy
s3_allow_parallel_part_upload
s3_check_objects_after_upload
s3_connect_timeout_ms
s3_create_new_file_on_insert
data.Parquet.gz -> data.1.Parquet.gz -> data.2.Parquet.gz,等等。
可能的值:
- 0 —
INSERT查询会创建一个新文件;如果文件已存在且未设置 s3_truncate_on_insert,则会失败。 - 1 — 如果未设置 s3_truncate_on_insert,则
INSERT查询会在每次 insert 时使用后缀 (从第二个文件开始) 创建一个新文件。
s3_disable_checksum
s3_ignore_file_doesnt_exist
- 1 —
SELECT返回空结果。 - 0 —
SELECT抛出异常。
s3_list_object_keys_size
s3_max_connections
s3_max_get_burst
s3_max_get_rps
s3_max_get_rps
s3_max_inflight_parts_for_one_file
s3_max_part_number
s3_max_put_burst
s3_max_put_rps
s3_max_put_rps
s3_max_single_operation_copy_size
s3_max_single_part_upload_size
s3_max_single_read_retries
s3_max_unexpected_write_error_retries
s3_max_upload_part_size
s3_min_upload_part_size
s3_path_filter_limit
_path 值的最大数量。
0 表示禁用。
s3_request_timeout_ms
s3_skip_empty_files
- 0 — 如果空文件与请求的 format 不兼容,
SELECT会抛出异常。 - 1 — 对于空文件,
SELECT返回空结果。
s3_slow_all_threads_after_network_error
true 时,只要任意一个 S3 请求遇到可重试的网络错误 (例如套接字超时) ,
所有向同一备份端点发起 S3 请求的线程都会被放慢。
当设置为 false 时,每个线程都会独立处理 S3 请求的 backoff,不受其他线程影响。
s3_strict_upload_part_size
s3_throw_on_zero_files_match
s3_truncate_on_insert
insert 前先截断内容。如果禁用,当 S3 对象已存在时,尝试 insert 会抛出异常。
可能的值:
- 0 —
INSERT查询会创建新文件;如果文件已存在且未设置 s3_create_new_file_on_insert,则会失败。 - 1 —
INSERT查询会用新数据替换文件中的现有内容。
s3_upload_part_size_multiply_factor
s3_upload_part_size_multiply_parts_count_threshold
s3_min_upload_part_size 就会乘以 s3_upload_part_size_multiply_factor。
s3_uri_style
s3_use_adaptive_timeouts
true 时,所有 S3 请求的前两次尝试都会使用较短的发送和接收超时时间。
设置为 false 时,所有尝试都会使用相同的超时时间。
s3_validate_request_settings
- 1 — 校验设置。
- 0 — 不校验设置。
s3queue_default_zookeeper_path
s3queue_enable_logging_to_s3queue_log
s3queue_keeper_fault_injection_probability
s3queue_migrate_old_metadata_to_buckets
schema_inference_cache_require_modification_time_for_url
schema_inference_use_cache_for_azure
schema_inference_use_cache_for_file
schema_inference_use_cache_for_hdfs
schema_inference_use_cache_for_s3
schema_inference_use_cache_for_url
secondary_indices_enable_bulk_filtering
select_sequential_consistency
此设置在 SharedMergeTree 和 ReplicatedMergeTree 中的行为不同。有关
select_sequential_consistency 在 SharedMergeTree 中的行为的更多信息,请参阅 SharedMergeTree 一致性。SELECT 查询启用或禁用顺序一致性。要求禁用 insert_quorum_parallel (默认启用) 。
可能的值:
- 0 — 禁用。
- 1 — 启用。
insert_quorum 执行的 INSERT 查询所写入数据的副本上执行 SELECT 查询。如果客户端访问的是不完整的副本,ClickHouse 将抛出异常。SELECT 查询不会包含尚未写入 quorum 所要求副本数的数据。
启用 insert_quorum_parallel 时 (默认即为启用) ,select_sequential_consistency 将不起作用。这是因为并行 INSERT 查询可能会写入不同的一组 quorum 副本,因此无法保证某一个副本一定已经接收到所有写入。
另请参见:
send_logs_level
send_logs_source_regexp
send_profile_events
- 0 — 已禁用。
- 1 — 已启用。
send_progress_in_http_headers
clickhouse-server 的响应中启用或禁用 X-ClickHouse-Progress HTTP 响应头。
如需了解更多信息,请参阅 HTTP interface 说明。
可能的值:
- 0 — 禁用。
- 1 — 启用。
send_table_structure_on_insert_with_inline_data
send_timeout
receive_timeout 也会一并设置。
serialize_query_plan
serialize_string_in_memory_with_zero_byte
session_timezone
timeZone() 和 serverTimeZone() 获取 session 时区和 server 时区。
可能的值:
system.time_zones中的任意时区名称,例如Europe/Berlin、UTC或Zulu
- 在第一个
SELECT查询中,未显式指定 time zone 的toDateTime()会遵循session_timezone设置和全局 time zone。 - 在第二个查询中,DateTime 是从 String 解析出来的,并继承了现有列
d的类型和 time zone。因此,session_timezone设置和全局 time zone 都不会生效。
set_overflow_mode
throw:抛出异常 (默认) 。break:停止执行查询并返回部分结果,就像 源数据已经耗尽一样。
select_sequential_consistency 和 SharedMergeTree 时,parts 更新的初始退避时间 (毫秒) 。仅在 ClickHouse Cloud 中可用。
在将 select_sequential_consistency 与 SharedMergeTree 配合使用时,parts 更新的最大退避时间 (毫秒) 。仅在 ClickHouse Cloud 中可用。
在将 select_sequential_consistency 与 SharedMergeTree 一起使用时,parts 更新的最大重试次数。仅在 ClickHouse Cloud 中可用。
在 SMT 表中执行 MOVE|REPLACE|ATTACH 分区操作后,自动同步一组数据分区片段。仅限 Cloud
short_circuit_function_evaluation
enable— 为适合使用短路求值的函数启用短路函数求值 (即可能抛出异常或计算开销较大的函数) 。force_enable— 为所有函数启用短路函数求值。disable— 禁用短路函数求值。
short_circuit_function_evaluation_for_nulls
short_circuit_function_evaluation_for_nulls_threshold
show_data_lake_catalogs_in_system_tables
show_processlist_include_internal
SHOW PROCESSLIST 查询输出中显示内部辅助进程。
内部进程包括字典重新加载、可刷新materialized view 重新加载、在 SHOW ... 查询中执行的辅助 SELECT、为处理损坏表而在内部执行的辅助 CREATE DATABASE ... 查询等。
show_table_uuid_in_table_create_query_if_not_nil
SHOW TABLE 查询的显示内容。
可选值:
- 0 — 查询显示时不包含表 UUID。
- 1 — 查询显示时包含表 UUID。
single_join_prefer_left_table
skip_redundant_aliases_in_udf
- 1 — 在 UDF 中会跳过 (替换) 这些别名。
- 0 — 在 UDF 中不会跳过 (替换) 这些别名。
- ClickHouse 因任何原因无法连接到副本。 连接副本时,ClickHouse 会进行多次尝试。如果这些尝试全部失败,则该副本会被视为不可用。
-
无法通过 DNS 解析副本主机名。
如果无法通过 DNS 解析副本的主机名,可能意味着以下情况:
- 副本所在主机没有 DNS 记录。这可能发生在使用动态 DNS 的系统中,例如 Kubernetes。在这类系统中,节点在停机期间可能无法解析,这并不属于错误。
- 配置错误。ClickHouse 配置文件中包含错误的主机名。
- 1 — 启用跳过。 如果某个分片不可用,ClickHouse 会基于部分数据返回结果,并且不会报告节点可用性问题。
- 0 — 禁用跳过。 如果某个分片不可用,ClickHouse 会抛出异常。
sleep_after_receiving_query_ms
sleep_in_send_data_ms
sleep_in_send_tables_status_ms
sort_overflow_mode
throw:抛出异常。break:停止执行查询并返回部分结果。
split_intersecting_parts_ranges_into_layers_final
split_parts_ranges_into_intersecting_and_non_intersecting_final
splitby_max_substrings_includes_remaining_string
max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。
可能的值:
0- 剩余字符串不会包含在结果数组的最后一个元素中。1- 剩余字符串会包含在结果数组的最后一个元素中。这与 Spark 的split()函数和 Python 的 ‘string.split()’ 方法的行为一致。
stop_refreshable_materialized_views_on_startup
SYSTEM START VIEWS 或 SYSTEM START VIEW <name> 启动它们。该设置也适用于新创建的视图。对不可刷新的 materialized view 不生效。
storage_file_read_method
read、pread、mmap。mmap 方法不适用于 clickhouse-server (其适用对象是 clickhouse-local) 。
storage_system_stack_trace_pipe_read_timeout_ms
system.stack_trace 表时,为接收来自线程的信息而从管道读取的最长等待时间。此设置仅用于测试,不建议用户更改。
stream_flush_interval_ms
stream_like_engine_allow_direct_select
stream_like_engine_insert_queue
stream_poll_timeout_ms
system_events_show_zero_values
system.events 中选择值为 0 的事件。
某些监控系统要求在每个检查点都传递所有指标值,即使某个指标值为 0 也是如此。
可能的值:
- 0 — 已禁用。
- 1 — 已启用。
system_metric_log_show_zero_values_in_histograms
system.metric_log 的 histograms 嵌套列。
默认情况下,总观测 count 为 0 的直方图会被跳过;而在每个已输出的直方图中,没有任何观测的桶条目也会从 histogram map 中省略。启用此设置后,无论 count 如何,都会写入每个直方图和每个桶——这对于要求每个指标在每个检查点都出现的监控系统很有用。
可能的值:
- 0 — 已禁用。
count = 0的直方图不会输出;已输出的直方图仅包含至少有一次观测的桶。 - 1 — 已启用。所有直方图都会被写入,且每个桶边界都会出现在
histogram中。
table_engine_read_through_distributed_cache
table_function_remote_max_addresses
- 正整数。
tcp_keep_alive_timeout
temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds
temporary_files_buffer_size
temporary_files_codec
- LZ4 — 使用 LZ4 压缩。
- NONE — 不使用压缩。
text_index_hint_max_selectivity
text_index_like_max_postings_to_read
use_text_index_like_evaluation_by_dictionary_scan。
text_index_like_min_pattern_length
needle 必须达到的最小长度。
短于此阈值的模式会匹配过多的字典标记,因此会被跳过,以避免高成本扫描。
要求启用 use_text_index_like_evaluation_by_dictionary_scan。
throw_if_no_data_to_insert
clickhouse-client 或 gRPC 接口 执行的 INSERT。
throw_on_error_from_cache_on_write_operations
throw_on_max_partitions_per_insert_block
max_partitions_per_insert_block 时的行为。
可能的值:
true- 当插入块达到max_partitions_per_insert_block时,会抛出异常。false- 当达到max_partitions_per_insert_block时,会记录一条警告日志。
throw_on_unsupported_query_inside_transaction
timeout_before_checking_execution_speed
min_execution_speed) 。
timeout_overflow_mode
max_execution_time,或预计运行时间超过 max_estimated_execution_time 时的处理方式。
可选值:
throw:抛出异常 (默认值) 。break:停止执行查询并返回部分结果,就像源数据已经耗尽一样。
timeout_overflow_mode_leaf
max_execution_time_leaf 时的行为。
可能的值:
throw:抛出异常 (默认) 。break:停止执行查询并返回部分结果,就像 源数据已经耗尽一样。
totals_auto_threshold
totals_mode = 'auto' 的阈值。
参见“WITH TOTALS 修饰符”一节。
totals_mode
trace_profile_events
- 1 — 启用 profile events 追踪。
- 0 — 禁用 profile events 追踪。
trace_profile_events_list
trace_profile_events 后,会将被追踪的事件限制为指定的逗号分隔名称列表。
如果 trace_profile_events_list 为空字符串 (默认值) ,则会追踪所有 profile events。
示例值:‘DiskS3ReadMicroseconds,DiskS3ReadRequestsCount,SelectQueryTimeMicroseconds,ReadBufferFromS3Bytes’
使用此设置可以在查询量很大时更精确地收集数据,因为否则大量事件可能会撑爆内部系统日志队列,导致其中一部分事件被丢弃。
transfer_overflow_mode
throw:抛出异常 (默认) 。break:停止执行查询并返回部分结果,就像 源数据已经耗尽一样。
transform_null_in
NULL 值不能参与比较,因为 NULL 表示未定义的值。因此,比较 expr = NULL 必须始终返回 false。启用此设置后,在 IN 运算符中,NULL = NULL 将返回 true。
可能的值:
- 0 —
IN运算符中对NULL值的比较返回false。 - 1 —
IN运算符中对NULL值的比较返回true。
null_in 表:
traverse_shadow_remote_data_paths
union_default_mode
SELECT 查询结果的模式。只有在使用 UNION 且未显式指定 UNION ALL 或 UNION DISTINCT 时,此设置才会生效。
可能的值:
'DISTINCT'— ClickHouse 在合并查询结果时会去除重复行。'ALL'— ClickHouse 在合并查询结果时会保留所有行,包括重复行。''— 与UNION一起使用时,ClickHouse 会抛出异常。
unknown_packet_in_send_data
update_parallel_mode
sync- 按顺序运行所有UPDATE查询。auto- 仅按顺序运行那些其更新列与另一查询表达式中使用的列之间存在依赖关系的UPDATE查询。async- 不对更新查询进行同步。
update_sequential_consistency
url_base
- 路径相对 URL (例如
data.csv) :根据 RFC 3986 与基准 URL 的路径合并。基准路径中最后一个/之后的所有内容都会被相对 URL 替换,因此末尾是否带斜杠很重要:https://example.com/dir/+data.csv=https://example.com/dir/data.csv,而https://example.com/dir+data.csv=https://example.com/data.csv。如果基准 URL 没有路径 (例如https://example.com) ,则会插入一个/:https://example.com/data.csv。相对 URL 中的点分段 (./和../) 会被归一化:https://example.com/dir/+../a.csv=https://example.com/a.csv。 - 主机相对 URL (例如
/test/data.csv) :根据基准 URL 的 scheme 和主机解析。 - 协议相对 URL (例如
//other.com/test/data.csv) :使用基准 URL 的协议进行解析。 - 仅包含查询字符串的引用 (例如
?x=1) :追加到基准 URL 的路径后 (替换现有的查询字符串/片段) 。 - 仅包含片段的引用 (例如
#frag) :追加到基准 URL 后,并保留现有的查询字符串 (替换现有片段) 。 - 空引用:返回不带片段的基准 URL。
url_base 为 https://example.com/def/,则:
data.csv解析为https://example.com/def/data.csv/test/data.csv解析为https://example.com/test/data.csv//other.com/test/data.csv解析为https://other.com/test/data.csv
use_async_executor_for_materialized_views
use_cache_for_count_from_files
file/s3/url/hdfs/azureBlobStorage 中对文件执行 count 时的行数缓存。
默认启用。
use_client_time_zone
use_compact_format_in_distributed_parts_names
Distributed 引擎的表,在后台 (distributed_foreground_insert) 执行 INSERT 时,使用紧凑格式存储块。
可能的值:
- 0 — 使用
user[:password]@host:port#default_database目录格式。 - 1 — 使用
[shard{shard_index}[_replica{replica_index}]]目录格式。
- 当
use_compact_format_in_distributed_parts_names=0时,集群定义中的更改不会应用于后台INSERT。 - 当
use_compact_format_in_distributed_parts_names=1时,调整集群定义中节点的顺序会改变shard_index/replica_index,请留意。
use_concurrency_control
concurrent_threads_soft_limit_num 和 concurrent_threads_soft_limit_ratio_to_cores) 。如果禁用,即使服务器已过载,也允许使用更多线程 (不建议在正常使用时这样做,主要仅用于测试) 。
Cloud 默认值:0。
use_hash_table_stats_for_join_reordering
use_hedged_requests
hedged_connection_timeout
内建立,或者在 receive_data_timeout 内未收到任何数据,则会启用新连接。查询会使用第一个发送非空 Progress 数据包的连接 (如果启用了 allow_changing_replica_until_first_data_packet,则也可以是 Data 数据包) ;
其他连接会被取消。支持 max_parallel_replicas > 1 的查询。
默认启用。
Cloud 默认值:0。
use_hive_partitioning
/name=value/) 中检测 Hive 风格分区,并允许在查询中将分区列作为虚拟列使用。这些虚拟列的名称将与分区路径中的名称相同,但以下划线 _ 开头。
use_iceberg_metadata_files_cache
- 0 - 已禁用
- 1 - 已启用
use_iceberg_partition_pruning
use_index_for_in_with_subqueries
IN 运算符右侧是子查询或表表达式,则尝试使用索引。
use_index_for_in_with_subqueries_max_values
use_join_disjunctions_push_down
use_legacy_to_time
use_page_cache_for_disks_without_file_cache
use_page_cache_for_local_disks
local_filesystem_read_method = 'pread' 或 'read'。它不会禁用操作系统页缓存;如需禁用,可使用 min_bytes_to_use_direct_io。仅影响常规表,不影响 file() 表函数或 File() File 表引擎。
use_page_cache_for_object_storage
use_page_cache_with_distributed_cache
use_paimon_partition_pruning
use_parquet_metadata_cache
- 0 - 禁用
- 1 - 启用
use_partition_pruning
use_partition_key
在 MergeTree 表的查询执行期间,使用分区键进行分区剪枝。
可能的值:
- 0 — 禁用。
- 1 — 启用。
use_primary_key
- 0 — 禁用。
- 1 — 启用。
use_query_cache
SELECT 查询可使用查询缓存。参数 enable_reads_from_query_cache
和 enable_writes_to_query_cache 可进一步控制缓存的使用方式。
可能的值:
- 0 - 已禁用
- 1 - 已启用
use_query_condition_cache
WHERE 子句条件的粒度范围,
并将这些信息作为临时索引用于后续查询。
可能的值:
- 0 - 已禁用
- 1 - 已启用
use_roaring_bitmap_iceberg_positional_deletes
use_skip_indexes
- 0 — 禁用。
- 1 — 启用。
use_skip_indexes_for_disjunctions
- 0 — 禁用。
- 1 — 启用。
use_skip_indexes_for_top_k
ORDER BY <column> LIMIT n 查询中的列上存在 minmax 跳过索引,优化器将尝试使用该 minmax 索引跳过与最终结果无关的粒度。这可以降低查询延迟。
可能的值:
- 0 — 已禁用。
- 1 — 已启用。
use_skip_indexes_if_final
- 0 — 禁用。
- 1 — 启用。
use_skip_indexes_if_final_exact_mode
- 0 — 已禁用。
- 1 — 已启用。
use_skip_indexes_on_data_read
- 0 — 已禁用。
- 1 — 已启用。
use_statistics
use_primary_key 和 use_skip_indexes 保持一致的考虑,优先使用此名称而非 allow_statistics_optimize
允许使用统计信息优化查询
use_statistics_cache
use_statistics_for_part_pruning
- 0 — 禁用。
- 1 — 启用。
use_strict_insert_block_limits
- 最小阈值 (与) :当 min_insert_block_size_rows 和 min_insert_block_size_bytes 都达到时。
- 最大阈值 (或) :当 max_insert_block_size_rows 或 max_insert_block_size_bytes 任一达到时。
- 最小阈值 (或) :当 min_insert_block_size_rows 或 min_insert_block_size_bytes 达到时。
use_structure_from_insertion_table_in_table_functions
use_text_index_header_cache
use_text_index_like_evaluation_by_dictionary_scan
use_text_index_postings_cache
use_text_index_tokens_cache
use_top_k_dynamic_filtering
ORDER BY <column> LIMIT n 查询时启用动态过滤优化。
启用后,查询执行器会尝试跳过那些不会进入结果集中最终 top N 行的粒度和行。此优化是动态的,延迟改善效果取决于数据分布以及查询中是否存在其他谓词。
可能的值:
- 0 — 已禁用。
- 1 — 已启用。
use_top_k_dynamic_filtering_for_variable_length_types
String、Array、Map、包含可变长度元素的 Tuple) 时应用 use_top_k_dynamic_filtering。
对于这类类型,如果列中的字典序最小值占主导 (例如大多是空字符串) ,且只能跳过少量粒度,那么动态过滤器执行的逐行阈值比较所带来的开销可能会超过其节省的成本。在这种情况下,动态过滤器非但不能改善查询延迟,反而会使其变差。
当此设置为 0 时,动态过滤仅适用于值在内存中具有固定最大大小的列 (数值、Date、DateTime、FixedString、Enum、这些类型的 Nullable 以及这些类型的 Tuple) 。设置为 1 时,动态过滤也会应用于可变长度类型。
可能的值:
- 0 — 禁用。
- 1 — 启用。
use_uncompressed_cache
use_uncompressed_cache 设为 1。
use_variant_as_common_type
Variant 类型用作 if/multiIf/array/map 函数的结果类型。
示例:
use_variant_default_implementation_for_comparisons
use_with_fill_by_sorting_prefix
validate_enum_literals_in_operators
IN、NOT IN、==、!= 等运算符中的枚举字面量是否符合枚举类型;如果字面量不是有效的枚举值,则会抛出异常。
validate_mutation_query
validate_polygons
- 0 — 禁用抛出异常。
pointInPolygon接受无效多边形,并可能返回不正确的结果。 - 1 — 启用抛出异常。
variant_throw_on_type_mismatch
true(默认) — 抛出异常。false— 对这些行返回NULL。
vector_search_filter_strategy
- ‘auto’ - 后过滤 (具体语义未来可能会变化) 。
- ‘postfilter’ - 使用向量相似度索引识别最近邻,然后再应用其他过滤条件
- ‘prefilter’ - 先评估其他过滤条件,再执行暴力搜索以识别最近邻。
vector_search_index_fetch_multiplier
vector_search_postfilter_multiplier
将从向量相似度索引中拉取的最近邻数量乘以该值。仅在使用其他谓词进行后过滤时,或在设置 ‘vector_search_with_rescoring = 1’ 时生效。