调研学习clickhouse,上一章介绍了clickhouse的配置项users.xml,这一章介绍另一大项config.xml
从clickhouse的官网看,clickhouse的配置参数主要分了两大方面,一个是config.xml中的服务器配置参数(Server Settings),另一个是常规配置参数(setttings)。
这里介绍常规配置参数(settings)
目录
distributed_product_mode
enable_optimize_predicate_expression
fallback_to_stale_replicas_for_distributed_queries
force_index_by_date
force_primary_key
force_data_skipping_indices
format_schema
fsync_metadata
enable_http_compression
http_zlib_compression_level
http_native_compression_disable_checksumming_on_decompress
send_progress_in_http_headers
max_http_get_redirects
input_format_allow_errors_num
input_format_allow_errors_ratio
input_format_values_interpret_expressions
input_format_values_deduce_templates_of_expressions
input_format_values_accurate_types_of_literals
input_format_defaults_for_omitted_fields
input_format_tsv_empty_as_default
input_format_tsv_enum_as_number
input_format_null_as_default
input_format_skip_unknown_fields
input_format_import_nested_json
input_format_with_names_use_header
date_time_input_format
date_time_output_format
join_default_strictness
join_any_take_last_row
join_use_nulls
partial_merge_join_optimizations
partial_merge_join_rows_in_right_blocks
join_on_disk_max_files_to_merge
any_join_distinct_right_table_keys
temporary_files_codec
max_block_size
preferred_block_size_bytes
merge_tree_min_rows_for_concurrent_read
merge_tree_min_bytes_for_concurrent_read
merge_tree_min_rows_for_seek
merge_tree_min_bytes_for_seek
merge_tree_coarse_index_granularity
merge_tree_max_rows_to_use_cache
merge_tree_max_bytes_to_use_cache
min_bytes_to_use_direct_io
network_compression_method
network_zstd_compression_level
log_queries
log_queries_min_query_duration_ms
log_queries_min_type
log_query_threads
max_insert_block_size
min_insert_block_size_rows
min_insert_block_size_bytes
max_replica_delay_for_distributed_queries
max_threads
max_insert_threads
max_compress_block_size
min_compress_block_size
max_query_size
max_parser_depth
Interactive_delay
connect_timeout,receive_timeout,send_timeout
cancel_http_readonly_queries_on_client_close
poll_interval
max_distributed_connections
distribution_connections_pool_size
connect_timeout_with_failover_ms
connection_pool_max_wait_ms
connections_with_failover_max_tries
extremes
kafka_max_wait_ms
use_uncompressed_cache
replace_running_query
replace_running_query_max_wait_ms
stream_flush_interval_ms
load_balancing
Random (by Default)
Nearest Hostname
In Order
First or Random
Round Robin
prefer_localhost_replica
totals_mode
totals_auto_threshold
max_parallel_replicas
compile
min_count_to_compile
output_format_json_quote_64bit_integers
output_format_json_quote_denormals
format_csv_delimiter
input_format_csv_unquoted_null_literal_as_null
input_format_csv_enum_as_number
output_format_csv_crlf_end_of_line
output_format_tsv_crlf_end_of_line
insert_quorum
insert_quorum_timeout
select_sequential_consistency
insert_deduplicate
deduplicate_blocks_in_dependent_materialized_views
max_network_bytes
max_network_bandwidth
max_network_bandwidth_for_user
max_network_bandwidth_for_all_users
count_distinct_implementation
distribution_group_by_no_merge
optimize_skip_unused_shards
allow_nondeterministic_optimize_skip_unused_shards
optimize_skip_unused_shards_nesting
force_optimize_skip_unused_shards
optimize_distributed_group_by_sharding_key
optimize_throw_if_noop
distribution_replica_error_half_life
distributed_replica_error_cap
distribution_replica_max_ignored_errors
distribution_directory_monitor_sleep_time_ms
distribution_directory_monitor_max_sleep_time_ms
distribution_directory_monitor_batch_inserts
os_thread_priority
query_profiler_real_time_period_ns
query_profiler_cpu_time_period_ns
allow_introspection_functions
input_format_parallel_parsing
min_chunk_bytes_for_parallel_parsing
output_format_avro_codec
output_format_avro_sync_interval
format_avro_schema_registry_url
input_format_avro_allow_missing_fields
background_pool_size
parallel_distributed_insert_select
insert_distributed_sync
use_compact_format_in_distributed_parts_names
background_buffer_flush_schedule_pool_size
background_move_pool_size
background_schedule_pool_size
always_fetch_merged_part
background_distributed_schedule_pool_size
validate_polygons
transform_null_in
low_cardinality_max_dictionary_size
low_cardinality_use_single_dictionary_for_part
low_cardinality_allow_in_native_format
allow_suspicious_low_cardinality_types
min_insert_block_size_rows_for_materialized_views
min_insert_block_size_bytes_for_materialized_views
output_format_pretty_grid_charset
optimize_read_in_order
mutations_sync
ttl_only_drop_parts
lock_acquire_timeout
cast_keep_nullable
output_format_pretty_max_value_width
output_format_pretty_row_numbers
allow_experimental_bigint_types
persistent
output_format_tsv_null_representation
更改分布式子查询的行为。
当查询包含分布式表的乘积时,即当分布式表的查询包含分布式表的非GLOBAL子查询时,ClickHouse将应用此设置。
限制条件:
可能的值:
deny
- 默认值。禁止使用这些类型的子查询(返回“ Double-distributed in / JOIN子查询被拒绝”异常)。local
—将子查询中的数据库和表替换为目标服务器(碎片)的本地查询,而保留普通的IN
/JOIN.
global
—将IN
/JOIN
查询替换为GLOBAL IN
/GLOBAL JOIN.
allow
—允许使用这些类型的子查询。打开SELECT
查询中的谓词下推。
谓词下推可能会大大减少分布式查询的网络流量。
可能的值:
默认值: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
子句适用于子查询完成后的所有数据。
如果没有更新的数据,则强制查询到过期的副本。请参见复制。
ClickHouse从表的过时副本中选择最相关的。
当在指向复制表的分布式表中执行SELECT时使用。
默认情况下,为1(启用)。
如果无法按日期使用索引,则禁用查询执行。
与MergeTree系列中的表一起使用。
如果force_index_by_date=1
,则ClickHouse将检查查询是否具有可用于限制数据范围的日期键条件。如果没有合适的条件,它将引发异常。
但是不会检查该条件是否会减少读取的数据量,例如,即使Date != ' 2000-01-01 '
条件与表中的所有数据匹配,也可以接受。更多信息,请参见MergeTree。
如果无法通过主键进行索引,则禁用查询执行。
与MergeTree系列中的表一起使用。
如果force_primary_key=1
,则ClickHouse会检查查询是否具有可用于限制数据范围的主键条件。如果没有合适的条件,它将引发异常。
但是不会检查该条件是否会减少读取的数据量。更多信息,请参见MergeTree。
如果未使用传递的二级索引,则禁用查询执行。
考虑以下示例。
CREATE TABLE data
(
key Int,
d1 Int,
d1_null Nullable(Int),
INDEX d1_idx d1 TYPE minmax GRANULARITY 1,
INDEX d1_null_idx assumeNotNull(d1_null) TYPE minmax GRANULARITY 1
)
Engine=MergeTree()
ORDER BY key;
SELECT * FROM data_01515;
SELECT * FROM data_01515 SETTINGS force_data_skipping_indices=''; -- 查询将产生CANNOT_PARSE_TEXT错误.
SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- 查询将产生 INDEX_NOT_USED 错误.
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='d1_idx'; -- Ok.
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`'; -- Ok (全功能解析器的示例).
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- 查询将产生INDEX_NOT_USED错误,因为未使用d1_null_idx。
SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- Ok.
与MergeTree系列中的表一起使用。
当您使用需要架构定义的格式(例如 Cap’n Proto or Protobuf. ),此参数很有用。该值取决于格式。
当写入.sql文件时启用或者禁用 fsync 。默认启用。
如果服务器具有数百万个不断创建和销毁的小表,则禁用它是有意义的。
在对HTTP请求的响应中启用或禁用数据压缩。
有关更多信息,请阅读HTTP接口描述。
可能的值:
默认值:0。
如果enable_http_compression = 1,则设置对HTTP请求的响应中的数据压缩级别。
可能的值:1到9之间的数字。
默认值:3。
从客户端解压缩HTTP POST数据时启用或禁用校验和验证。仅用于ClickHouse本机压缩格式(不适用于gzip
或deflate
)。
有关更多信息,请阅读HTTP接口描述。
可能的值:
默认值:0。
在clickhouse-server响应中启用或禁用X-ClickHouse-Progress HTTP响应标头。
有关更多信息,请阅读HTTP接口描述。
可能的值:
默认值:0。
限制URL引擎表的最大HTTP GET重定向hops数。
该设置适用于两种类型的表:由CREATE TABLE查询创建的表和url表函数创建的表。
可能的值:
默认值:0。
设置从文本格式(CSV,TSV等)读取时可接受的最大错误数。
默认值为0。
始终将其与input_format_allow_errors_ratio配对。
如果在读取行时发生错误,但错误计数器仍小于input_format_allow_errors_num
,则ClickHouse会忽略该行并继续进行下一行。
如果同时超过input_format_allow_errors_num
和input_format_allow_errors_ratio
,则ClickHouse会引发异常。
设置从文本格式(CSV,TSV等)读取时允许的最大错误百分比。
错误百分比设置为0到1之间的浮点数。
默认值为0。
始终将其与input_format_allow_errors_num配对。
如果在读取行时发生错误,但错误计数器仍小于input_format_allow_errors_ratio
,则ClickHouse会忽略该行并继续进行下一行。
如果同时超过input_format_allow_errors_num
和input_format_allow_errors_ratio
,则ClickHouse会引发异常。
如果快速流解析器无法解析数据,则启用或禁用完整的SQL解析器。
此设置仅用于数据插入时的“Values”格式。有关语法解析的更多信息,请参见语法
可能的值:
0-禁用。
在这种情况下,您必须提供格式化的数据。请参阅格式部分。
1-启用。
在这种情况下,可以将SQL表达式用作值,但是这种方式的数据插入速度要慢得多。如果仅插入格式化的数据,设置为0比较好
默认值:1。
使用例
插入具有不同设置的DateTime类型值。
SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t VALUES (now())
Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1)
SET input_format_values_interpret_expressions = 1;
INSERT INTO datetime_t VALUES (now())
Ok.
最后一个查询等效于以下内容:
SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t SELECT now()
Ok.
为“Values”格式的SQL表达式启用或禁用模板推导。它允许解析和解释Values中的
表达式
可能的值:
默认值:1。
对于以下查询:
INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ...
input_format_values_interpret_expressions=1
和format_values_deduce_templates_of_expressions=0
,则为每行分别解释表达式(这对于大量的行来说非常慢)。input_format_values_interpret_expressions=0
与format_values_deduce_templates_of_expressions=1
在第一,第二和第三行表达式是使用模板解析的lower(String)
和解释,第四行中的表达进行解析与另一模板(upper(String)
)。input_format_values_interpret_expressions=1
和format_values_deduce_templates_of_expressions=1
,则与前面的情况相同,但如果无法推断出模板,则还允许回退到单独解释表达式。仅当input_format_values_deduce_templates_of_expressions = 1时才使用此设置。某些列的表达式可能具有相同的结构,但包含不同类型的数值,例如:
(..., abs(0), ...), -- UInt64 literal
(..., abs(3.141592654), ...), -- Float64 literal
(..., abs(-1), ...), -- Int64 literal
可能的值:
0-禁用。
在这种情况下,ClickHouse可能对某些文字使用更通用的类型(例如, Float64
或Int64
代替UInt64
),但是它可能导致溢出和精度问题。
1-启用。
在这种情况下,ClickHouse检查文字的实际类型并使用相应类型的表达式模板。在某些情况下,它可能会大大减慢的表达评估速度Values
。
默认值:1。
执行INSERT查询时,将省略的输入列值替换为各个列的默认值。此选项仅适用于JSONEachRow,CSV和TabSeparated格式。
注意:启用此选项后,扩展表元数据将从服务器发送到客户端。它消耗了服务器上的其他计算资源,并可能降低性能。
可能的值:
默认值:1。
启用后,将TSV中的空白输入字段替换为默认值。 对于复杂的默认表达式,也必须启用input_format_defaults_for_omitted_fields。
默认禁用。
对于TSV输入格式,启用或禁用将枚举值解析枚举ID。
可能的值:
0 —枚举值被解析为值。
1-枚举值被解析为枚举ID
默认值:0。
举例:
CREATE TABLE table_with_enum_column_for_tsv_insert (Id Int32,Value Enum('first' = 1, 'second' = 2)) ENGINE=Memory();
--当input_format_tsv_enum_as_number启用时
SET input_format_tsv_enum_as_number = 1;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 102 2;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 103 1;
SELECT * FROM table_with_enum_column_for_tsv_insert;
--结果
┌──Id─┬─Value──┐
│ 102 │ second │
└─────┴────────┘
┌──Id─┬─Value──┐
│ 103 │ first │
└─────┴────────┘
--当input_format_tsv_enum_as_number禁用时
SET input_format_tsv_enum_as_number = 0;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 102 2;
--结果
引发异常
(20.8的时候还没有)
如果输入数据包含NULL,但对应列的数据类型不是Nullable(T)(对于文本输入格式),则启用或禁用默认值。
启用或禁用跳过多余数据的插入。
写入数据时,如果输入数据包含目标表中不存在的列,则ClickHouse会引发异常。如果启用了跳过,则ClickHouse不会插入额外的数据,也不会引发异常。
支持的格式:
可能的值:
默认值:0。
启用或禁用带有嵌套对象的JSON数据插入。
支持的格式:
可能的值:
默认值:0。
也可以看看:
嵌套结构
启用或禁用在插入数据时检查列顺序。
为了提高插入性能,如果您确定输入数据的列顺序与目标表中的顺序相同,建议禁用此检查。
支持的格式:
可能的值:
默认值:1。
允许选择日期和时间的文本表示的解析器。
该设置不适用于日期和时间功能。
可能的值:
'best_effort'
—启用扩展解析。
ClickHouse可以解析基本YYYY-MM-DD HH:MM:SS
格式以及所有ISO 8601日期和时间格式。例如,'2018-06-08T01:02:03.000Z'
。
'basic'
—使用基本解析器。
ClickHouse只能解析基本格式YYYY-MM-DD HH:MM:SS
或YYYY-MM-DD
格式。例如,'2019-08-20 10:18:56'
或2019-08-20
。
默认值:'basic'
。
也可以看看:
允许选择日期和时间的文本表示形式的不同输出格式。
可能值:
'simple'
-简单的输出格式。
Clickhouse输出日期和时间YYYY-MM-DD hh:mm:ss
格式。例如,'2019-08-20 10:18:56'
。根据数据类型的时区(如果存在)或服务器时区执行计算。
'iso'
-ISO输出格式。
Clickhouse以ISO 8601 YYYY-MM-DDThh:mm:ssZ
格式输出日期和时间。例如,'2019-08-20T10:18:56Z'
。请注意,输出以UTC表示(Z
表示UTC)。
'unix_timestamp'
-Unix时间戳输出格式。
Clickhouse以Unix时间戳格式输出日期和时间。例如'1566285536'
。
默认值:'simple'
。
也可以看看:
设置JOIN子句的默认严格性。
可能的值:
ALL
—如果右表具有多个匹配的行,则ClickHouse从匹配的行创建笛卡尔乘积。这是JOIN
标准SQL的正常行为。ANY
—如果右表具有多个匹配的行,则仅连接找到的第一个行。如果右表只有一个匹配行,则ANY
和的结果ALL
相同。ASOF
—用于加入不确定匹配的序列。Empty string
-如果ALL
还是ANY
未在查询中指定的,ClickHouse抛出异常。默认值:ALL
。
更改“ ANY”的联接操作行为。
可能的值:
默认值:0。
也可以看看:
设置JOIN行为的类型。合并表格时,可能会出现空单元格。ClickHouse根据此设置以不同的方式填充它们。
可能的值:
JOIN
行为与标准SQL相同。相应字段的类型将转换为Nullable,并且空单元格将填充NULL。默认值:0。
禁用JOIN查询的部分合并联接算法中的优化。
默认情况下,此设置启用可能导致错误结果的改进。如果您在查询中看到可疑的结果,请通过此设置禁用优化。在不同版本的ClickHouse服务器中,优化可能会有所不同。
可能的值:
默认值:1。
在JOIN查询的部分合并联接算法中限制右侧联接数据块的大小。
ClickHouse server:
可能的值:
默认值:65536
限制在磁盘上执行MergeJoin操作时允许并行排序的文件数。
设置的值越大,使用的RAM越多,所需的磁盘I / O越少。
可能的值:
默认值:64。
在ANY INNER|LEFT JOIN
操作中启用旧版ClickHouse服务器行为。
启用旧版行为时:
t1 ANY LEFT JOIN t2
and t2 ANY RIGHT JOIN t1
操作的结果是不相等的,因为ClickHouse使用具有多对一的从左到右的表键映射的逻辑。禁用旧版行为时:
t1 ANY LEFT JOIN t2
和t2 ANY RIGHT JOIN t1
操作的结果相等,因为ClickHouse使用在操作中提供一对多键映射的逻辑ANY RIGHT JOIN
。ANY INNER JOIN
运算结果在左右表中每个键包含一行。可能的值:
默认值:0。
也可以看看:
为磁盘上的排序和联接操作中使用的临时文件设置压缩编解码器。
可能的值:
默认值:LZ4。
在ClickHouse中,数据由块(列部分的集合)处理。单个块的内部处理周期足够有效,但是每个块都有明显的开销。单个块的内部处理周期性能足够好,但是每个块都有明显的开销。
对于要从表中加载的块大小(以行计数),建议使用max_block_size设置。
块的大小不能太小,也不能太大,避免在多个线程中提取大量列时占用过多内存,并至少保留一些缓存。
默认值:65,536
并非总是从表中加载max_block_size大小的块。 如果很明显需要检索较少的数据,则处理较小的块。
和使用max_block_size的目的相同,但是是设置快的大小(bytes),自动确定行数。当然块大小不能超过max_block_size行。
默认值:1,000,000。仅当从MergeTree引擎读取时才有效。
如果从一个mergeTree表中读取的行数超过了merge_tree_min_rows_for_concurrent_read,那么clickhouse尝试使用多线程进行并发读取。
可能的值:
默认值:163840
如果从一个mergeTree表中读取的字节数超过了merge_tree_min_bytes_for_concurrent_read,那么clickhouse尝试使用多线程进行并发读取。
可能的值:
默认值:251658240
如果要在一个文件中读取的两个数据块之间的距离小于merge_tree_min_rows_for_seek
行,则ClickHouse不会搜索文件,而是顺序读取数据。
可能的值:
默认值:0。
如果要在一个文件中读取的两个数据块之间的距离小于merge_tree_min_bytes_for_seek的字节时
,则ClickHouse不会搜索文件,而是顺序读取数据。
可能的值:
默认值:0。
搜索数据时,ClickHouse检查索引文件中的数据标记。如果ClickHouse发现所需键在某个范围内,则会将该范围划分为多个merge_tree_coarse_index_granularity
子范围,然后在该范围内递归搜索所需键。
可能的值:
默认值:8。
如果ClickHouse在一个查询中读取的行数超过了merge_tree_max_rows_to_use_cache行,则它不使用未压缩块的缓存。
ClickHouse使用此缓存来加快对重复的小型查询的响应。此设置可保护高速缓存免受读取大量数据的查询的破坏。
uncompressed_cache_size定义未压缩块的高速缓存的大小。
可能的值:
默认值:128×8192。
如果ClickHouse在一个查询中读取的字节数超过了merge_tree_max_bytes_to_use_cache行,则它不使用未压缩块的缓存。
ClickHouse使用此缓存来加快对重复的小型查询的响应。此设置可保护高速缓存免受读取大量数据的查询的破坏。
uncompressed_cache_size定义未压缩块的高速缓存的大小。
可能的值:
默认值:2013265920
使用直接I / O访问存储磁盘所需的最小数据量。
从表格读取数据时,ClickHouse使用此设置。如果要读取的所有数据的总存储量超过min_bytes_to_use_direct_io
字节,则ClickHouse会使用该选项从存储磁盘读取数据。
可能的值:
默认值:0。
设置用于服务器之间以及服务器与clickhouse-client之间的通信的数据压缩方法。
可能的值:
LZ4
—设置LZ4压缩方法。ZSTD
—设置ZSTD压缩方法。默认值:LZ4
。
也可以看看
调整ZSTD压缩级别。仅在network_compression_method设置为ZSTD时使用
。
可能的值:
默认值:1
。
设置查询日志记录。
使用此设置发送到ClickHouse的查询将根据服务器配置参数中的query_log规则记录。
log_queries=1
查询运行到下表所需的最短时间:
system.query_log
system.query_thread_log
只有具有以下类型的查询才会进入日志:
QUERY_FINISH
EXCEPTION_WHILE_PROCESSING
类型:毫秒
query_log
最小类型的日志。
可能的值:
- QUERY_START
(=1
)
- QUERY_FINISH
(=2
)
- EXCEPTION_BEFORE_START
(=3
)
- EXCEPTION_WHILE_PROCESSING
(=4
)
默认值:QUERY_START
。
用来限制进入query_log的条目,如果只对错误信息感兴趣,可以使用
EXCEPTION_WHILE_PROCESSING
设置查询线程日志记录。
使用此设置,运行查询的线程将根据服务器配置参数中的query_thread_log规则记录。
log_query_threads=1
要插入表中的块的大小(以行数计)。
此设置仅在服务器构成块的情况下适用。
例如,对于通过HTTP接口的INSERT,服务器解析数据格式并形成指定大小的块。
但是,当使用clickhouse-client时,客户端会解析数据本身,并且服务器上的“ max_insert_block_size”设置不会影响插入的块的大小。使用INSERT SELECT时,该设置也没有作用,因为数据是使用SELECT之后形成的相同块插入的。
默认值:1,048,576
默认值略大于max_block_size。这样做的原因是因为某些表引擎(* MergeTree)在磁盘上为每个插入的块形成了一个数据部分,这是一个相当大的实体。类似地,* MergeTree表在插入期间对数据进行排序,并且足够大的块大小允许对RAM中的更多数据进行排序。
块中可以通过INSERT查询插入到表中的最小行数。较小的块将被压缩为较大的块。
可能的值:
默认值:1048576
块中可以通过INSERT查询插入到表中的最小字节数。较小的块将被压缩为较大的块。
可能的值:
默认值:268435456
为分布式查询禁用滞后副本。请参见复制。
以秒为单位设置时间。如果副本滞后于设置值,则不使用该副本。
默认值:300。
SELECT
从指向复制表的分布式表执行时使用。
查询处理线程的最大数量,不包括用于从远程服务器检索数据的线程(请参见“ max_distributed_connections”参数)。
这个参数适用于,处于查询处理管道的同一阶段的并行执行的线程。
例如,当从表中读取数据时,如果可以使用函数求值,使用WHERE进行过滤并使用至少“ max_threads”个线程并行地为GROUP BY进行预聚合,则可以使用“ max_threads”。
默认值:物理CPU内核数。
如果通常一次在服务器上运行少于一个SELECT查询,则将此参数设置为稍小于处理器核心实际数量的值。
对于由于LIMIT而快速完成的查询,可以设置较低的“ max_threads”。例如,如果每个块中都有必要的条目数,并且max_threads = 8,则将检索8个块,尽管仅读取一个块就足够了。
max_threads
值越小,消耗的内存越少。
执行INSERT SELECT
查询的最大线程数。
可能的值:
INSERT SELECT
无并行执行。默认值:0。
并行INSERT SELECT仅在SELECT部分并行执行时才有效,见max_threads的设置。
较高的值将导致较高的内存使用率。
在压缩以写入表之前,未压缩数据块的最大大小。默认情况下为1,048,576(1 MiB)。
如果减小大小,则由于高速缓存局部性,压缩率将显着降低,压缩和解压缩速度会略有增加,并且内存消耗也会减少。
通常没有任何理由更改此设置。
不要将压缩块(由字节组成的内存块)与查询处理块(表中的一组行)混淆。
对于MergeTree表。为了减少处理查询时的延迟,如果块的大小大于等于'min_compress_block_size',则在写入下一个标记时将压缩该块。默认值为65,536。
如果未压缩的数据小于“ max_compress_block_size”,则块的实际大小不小于此值且不小于一个标记的数据量。
让我们来看一个例子。假设在创建表期间将“ index_granularity”设置为8192。
我们正在编写一个UInt32类型的列(每个值4个字节)。当写入8192行时,总计将为32 KB数据。由于min_compress_block_size = 65,536,因此每两个标记将形成一个压缩块。
我们正在编写一个String类型的URL列(每个值的平均大小为60个字节)。当写入8192行时,平均值将略小于500 KB数据。由于大于65,536,将为每个标记形成一个压缩块。在这种情况下,从磁盘读取单个标记范围内的数据时,不会解压缩多余的数据。
通常没有任何理由更改此设置。
可以带入RAM以使用SQL解析器进行解析的查询的最大部分。
INSERT查询还包含由单独的流解析器(消耗O(1)RAM)处理的INSERT数据,该数据不包括在此限制中。
默认值:256kb
限制递归下降解析器中的最大递归深度。允许控制堆栈大小。
可能的值:
预设值:1000。
检查请求执行是否已取消,并发送进度的时间间隔(以微秒为单位)。
默认值:100,000(检查取消并每秒发送10次进度)。
用于与客户端通信的套接字上的超时(以秒为单位)。
预设值:10、300、300。
当客户端关闭连接而不等待响应时,取消HTTP只读查询(例如SELECT)。
默认值:0
将等待循环锁定指定的秒数。
默认值:10
与远程服务器的并发连接的最大数量,用于将单个查询分布式处理到单个Distributed表。我们建议设置一个不小于群集中服务器数量的值。
默认值:1024
以下参数仅在创建分布式表(和启动服务器时)时使用,因此没有理由在运行时更改它们。
与远程服务器的并发连接的最大数量,用于分布式处理所有查询到一个Distributed表。我们建议设置一个不小于群集中服务器数量的值。
默认值:1024
如果在群集定义中使用了“ shard”和“ replica”部分,则连接到分布式表引擎的远程服务器的超时(以毫秒为单位)。
如果不成功,则尝试进行几次尝试以连接到各种副本。
默认值:50。
连接池已满时,连接的等待时间(以毫秒为单位)。
可能的值:
默认值:0。
分布式表引擎与每个副本的最大连接尝试次数。
默认值:3。
是否计算极值(查询结果列中的最小值和最大值)。
接受0或1。默认情况下,0(禁用)。
有关更多信息,请参见“极限值”部分。
重试之前从Kafka读取消息的等待时间(以毫秒为单位)。
可能的值:
预设值:5000。
也可以看看:
是否使用未压缩块的缓存。接受0或1。默认情况下,0(禁用)。
当使用大量短查询时,使用未压缩的缓存(仅适用于MergeTree系列中的表)可以显着减少延迟并提高吞吐量。为频繁发送简短请求的用户启用此设置。还请注意uncompressed_cache_size配置参数(仅在配置文件中设置)–未压缩的缓存块的大小。默认情况下为8 GiB。未压缩的缓存将根据需要填充,并且使用最少的数据将被自动删除。
对于读取至少一些数据量(一百万行或更多)的查询,未压缩的缓存将自动禁用,以节省真正小的查询的空间。这意味着您可以将“ use_uncompressed_cache”设置始终设置为1。
使用HTTP接口时,可以传递'query_id'参数。这是用作查询标识符的任何字符串。
如果此时已经存在来自具有相同“ query_id”的相同用户的查询,则行为取决于“ replace_running_query”参数。
0
(默认)–引发异常(如果已经在运行具有相同“ query_id”的查询,则不允许查询运行)。
1
–取消旧查询,然后开始运行新查询。
Yandex.Metrica使用将此参数设置为1来实施针对细分条件的建议。输入下一个字符后,如果旧查询尚未完成,则应将其取消。
query_id
当replace_running_query设置处于活动状态时,用于运行查询的等待时间结束。
可能的值:
query_id
。预设值:5000。
流刷新间隔,在超时或线程生成max_insert_block_size行时工作,适用于具有流式传输的表。
默认值为7500。
值越小,数据刷新到表的频率越高。将该值设置得太低会导致性能下降。
指定用于分布式查询处理的副本选择算法。
ClickHouse支持以下选择副本的算法:
也可以看看:
load_balancing = random
计算每个副本的错误数量。查询将以最少的错误发送到副本,如果存在多个错误,则发送给任何一个。
缺点:不考虑服务器的邻近性;如果副本具有不同的数据,则您还将获得不同的数据。
load_balancing = nearest_hostname
计算每个副本的错误数量。每隔5分钟,错误数量将被2整除。因此,最近一次使用指数平滑计算了错误数量。如果一个副本的错误数量最少(即,最近在其他副本上发生的错误),则将查询发送给它。
如果多个副本具有相同的最小错误数,该查询将以与配置文件中服务器的主机名最相似的主机名发送到副本(相同位置的不同字符数,最多两个主机名的最小长度)。
例如,example01-01-1和example01-01-2在一个位置上是不同的,而example01-01-1和example01-02-2在两个位置上是不同的。
这种方法看似原始,但不需要使用对IPv6地址而言很复杂的外部网络拓扑数据,也不需要比较IP地址。
因此,如果存在等效的副本,则首选名称最接近的副本。
我们还可以假设在将查询发送到同一服务器时,在没有故障的情况下,分布式查询也将到达相同的服务器。因此,即使将不同的数据放在副本上,查询也将返回几乎相同的结果。
load_balancing = in_order
具有相同数量错误的副本将以与配置中指定的顺序相同的顺序进行访问。
当您确切知道哪个副本更可取时,此方法适用。
load_balancing = first_or_random
此算法选择集合中的第一个副本,如果第一个副本不可用,则选择一个随机副本。
在cross-replication设置中有效,但在其他配置中无效。
first_or_random算法解决了in_order算法的问题。
使用in_order,如果一个副本出现故障,则下一个副本将加倍负载,而其余副本则处理通常的流量。使用first_or_random算法时,负载在仍然可用的副本之间平均分配。
通过使用设置load_balancing_first_offset可以明确定义第一个副本是什么。 这样可以更好地控制副本之间的查询工作负载。
load_balancing = round_robin
该算法对具有相同错误数的副本使用循环策略(仅考虑具有round_robin策略的查询)。
处理分布式查询时。使用localhost副本启用/禁用首选
可能的值:
默认值:1。
如果使用max_parallel_replicas,请禁用此设置。
存在HAVING时以及存在max_rows_to_group_by和group_by_overflow_mode ='any'时如何计算TOTALS。
请参见“WITH TOTALS modifier”部分。
totals_mode = 'auto'
.的阈值
请参见“WITH TOTALS modifier”部分。
执行查询时,每个分片的最大副本数。
为了保持一致性(以获取同一数据拆分的不同部分),此选项仅在设置采样键时才有效。
复制延迟不受控制。
启用查询编译。默认情况下,0(禁用)。
编译仅用于查询处理管道的一部分:用于聚合的第一阶段(GROUP BY)。
如果管道的这一部分已编译,由于部署周期短和内联聚合函数调用,查询运行速度可能更快。对于具有多个简单聚合函数的查询,可以看到最大的性能改进(在极少数情况下,速度提高了四倍)。通常,性能提升微不足道。在极少数情况下,它可能会减慢查询的执行速度。
运行编译之前可能使用已编译代码块的次数。默认情况下为3。
对于测试,该值可以设置为0:编译同步运行,并且查询在继续执行之前等待编译过程的结束。对于所有其他情况,请使用以1开头的值。编译通常需要大约5-10秒。
如果该值为1或更大,编译将在单独的线程中异步进行。结果准备就绪后将立即使用,包括当前正在运行的查询。
查询中使用的聚合函数和GROUP BY子句中的键类型的每种不同组合都需要编译后的代码。
编译结果以.so文件的形式保存在生成目录中。对编译结果的数量没有限制,因为它们不占用太多空间。重新启动服务器后,将使用旧结果,除非升级服务器-在这种情况下,将删除旧结果。
如果该值为true,则在使用JSON * Int64和UInt64格式时(以与大多数JavaScript实现兼容),引号中会出现整数。否则,将输出不带引号的整数。
启用+nan
,-nan
,+inf
,-inf
输出在JSON输出格式。
可能的值:
默认值:0。
例
考虑下表account_orders
:
┌─id─┬─name───┬─duration─┬─period─┬─area─┐
│ 1 │ Andrew │ 20 │ 0 │ 400 │
│ 2 │ John │ 40 │ 0 │ 0 │
│ 3 │ Bob │ 15 │ 0 │ -100 │
└────┴────────┴──────────┴────────┴──────┘
如果为output_format_json_quote_denormals = 0
,查询将null
在输出中返回值:
SELECT area/period FROM account_orders FORMAT JSON;
{
"meta":
[
{
"name": "divide(area, period)",
"type": "Float64"
}
],
"data":
[
{
"divide(area, period)": null
},
{
"divide(area, period)": null
},
{
"divide(area, period)": null
}
],
"rows": 3,
"statistics":
{
"elapsed": 0.003648093,
"rows_read": 3,
"bytes_read": 24
}
}
当output_format_json_quote_denormals = 1
,查询返回:
{
"meta":
[
{
"name": "divide(area, period)",
"type": "Float64"
}
],
"data":
[
{
"divide(area, period)": "inf"
},
{
"divide(area, period)": "-nan"
},
{
"divide(area, period)": "-inf"
}
],
"rows": 3,
"statistics":
{
"elapsed": 0.000070241,
"rows_read": 3,
"bytes_read": 24
}
}
该字符在CSV数据中被解释为定界符。默认情况下,定界符为,
。
对于CSV输入格式,启用或禁用解析未引用的NULL
文字(的同义词\N
)。
启用或禁用将枚举值解析为CSV输入格式的枚举ID。
可能的值:
默认值:0。
例子
考虑表:
CREATE TABLE table_with_enum_column_for_csv_insert (Id Int32,Value Enum('first' = 1, 'second' = 2)) ENGINE=Memory();
当input_format_csv_enum_as_number
启用设置:
SET input_format_csv_enum_as_number = 1;
INSERT INTO table_with_enum_column_for_csv_insert FORMAT CSV 102,2;
SELECT * FROM table_with_enum_column_for_csv_insert;
结果:
┌──Id─┬─Value─────┐
│ 102 │ second │
└─────┴───────────┘
当input_format_csv_enum_as_number
设置为禁用时,INSERT
查询:
SET input_format_csv_enum_as_number = 0;
INSERT INTO table_with_enum_column_for_csv_insert FORMAT CSV 102,2;
引发异常。
在CSV中使用DOS / Windows风格的行分隔符(CRLF),而不是Unix风格(LF)。
在TSV中使用DOC / Windows样式的行分隔符(CRLF),而不是Unix样式(LF)。
启用仲裁写入。
insert_quorum < 2
,则仲裁写入被禁用。insert_quorum >= 2
,则启用仲裁写入。默认值:0。
法定写人数
仅当ClickHouse设法在insert_quorum_timeout期间将数据正确写入副本的insert_quorum时,INSERT才能成功。
如果由于任何原因而成功写入的副本数量未达到insert_quorum,则认为写入失败,并且ClickHouse将从所有已写入数据的副本中删除插入的块。
仲裁中的所有副本都是一致的,即它们包含来自所有先前INSERT查询的数据。 INSERT序列被线性化。
读取从insert_quorum写入的数据时,可以使用select_sequential_consistency选项。
ClickHouse生成异常
insert_quorum
。insert_quorum
副本的时尝试写入数据。如果用户尝试INSERT
在完成前一个操作之前执行一个操作,则可能会发生这种情况insert_quorum
。也可以看看:
写入仲裁超时(以毫秒为单位)。
如果已经超时并且尚未发生写入,ClickHouse将生成一个异常。
客户必须重复查询来将相同的块写入相同或任何其他副本。
默认值:600000毫秒(十分钟)。
也可以看看:
启用或禁用SELECT
查询的顺序一致性:
可能的值:
默认值:0。
用法
启用顺序一致性后,ClickHouse允许客户端仅对那些,包含所有用insert_quorum执行的INSERT查询中的数据的副本,执行SELECT查询。
如果客户端引用部分副本,则ClickHouse将生成一个异常。 SELECT查询将不包括尚未写入副本仲裁的数据。
也可以看看:
启用或禁用INSERT的块重复数据删除(对于Replicated *表)。
可能的值:
0-禁用。
1-启用。
默认值:1。
默认情况下,通过INSERT语句插入复制表中的块将进行重复数据删除(请参见数据复制)。
为从Replicated *表接收数据的实例化视图启用或禁用重复数据删除检查。
0-禁用。
1-启用。
默认值:0
默认情况下,不对实例化视图执行重复数据删除,而是在源表的上游进行重复数据删除。
如果由于源表中的重复数据删除而跳过了INSERTed块,不会在附加的实例化视图中插入任何内容。
存在此行为是对于实例化视图聚合后插入的块相同但从不同的INSERT派生到源表中的情况,为了能够将高度聚合的数据插入到物化视图中。
同时,此行为“破坏”了INSERT幂等性。
如果对主表的INSERT操作成功而对物化视图的INSERT操作失败(例如,由于与Zookeeper的通信失败),则客户端将收到错误消息并可以重试该操作。
但是,实例化视图将不会收到第二个插入,因为它会通过在主(源)表中进行重复数据删除而被丢弃。
设置deduplicate_blocks_in_dependent_materialized_views允许更改此行为。重试后,实例化视图将收到重复插入,并自行执行重复数据删除检查,忽略源表的检查结果,并将插入由于第一次失败而丢失的行。
限制执行查询时通过网络接收或传输的数据量(以字节为单位)。此设置适用于每个单独的查询。
可能的值:
默认值:0。
限制通过每秒字节数在网络上进行数据交换的速度。此设置适用于每个查询。
可能的值:
默认值:0。
限制通过每秒字节数在网络上进行数据交换的速度。此设置适用于单个用户执行的所有同时运行的查询。
可能的值:
默认值:0。
以每秒字节数为单位限制通过网络交换数据的速度。此设置适用于服务器上所有同时运行的查询。
可能的值:
默认值:0。
指定应使用哪个uniq *函数来执行 COUNT(DISTINCT …) 构造。
可能的值:
默认值:uniqExact
启用或禁用跳过不可用的分片。
如果碎片的所有副本都不可用,则认为碎片不可用。
在以下情况下,副本不可用:
副本无法通过DNS解析。
如果副本的主机名无法通过DNS解析,则可能表示以下情况:
副本的主机没有DNS记录。它可以发生在具有动态DNS的系统中,例如Kubernetes,在停机期间节点可能无法解析,这不是错误。
配置错误。ClickHouse配置文件包含错误的主机名。
可能的值:
1-启用跳过。
如果分片不可用,ClickHouse将根据部分数据返回结果,并且不会报告节点可用性问题。
0-禁用跳过。
如果分片不可用,则ClickHouse会引发异常。
默认值:0。
不合并来自不同服务器的聚合状态以进行分布式查询处理,如果可以确定在不同的分片上有不同的键,则可以使用此方法。
可能的值:
ORDER BY
和LIMIT
在引发剂(可用于查询与ORDER BY
和/或LIMIT
)。举例:
SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 1
FORMAT PrettyCompactMonoBlock
┌─dummy─┐
│ 0 │
│ 0 │
└───────┘
SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 2
FORMAT PrettyCompactMonoBlock
┌─dummy─┐
│ 0 │
└───────┘
默认值:0
为具有分片键条件的SELECT查询启用或禁用跳过未使用的分片WHERE/PREWHERE
(假设数据是通过分片键分发的,否则不执行任何操作)。
可能的值:
默认值:0
在分片密钥中允许使用不确定性函数(如rand
或dictGet
,因为以后会有一些警告)。
可能的值:
默认值:0
控件optimize_skip_unused_shards(因此仍然需要optimize_skip_unused_shards)取决于分布式查询的嵌套级别(当您拥有分布式表并查看另一个分布式表时的情况)。
可能的值:
optimize_skip_unused_shards
始终工作。optimize_skip_unused_shards
仅对第一级启用。optimize_skip_unused_shards
第二级。默认值:0
如果启用了optimize_skip_unused_shards,并且无法跳过未使用的分片,则启用或禁用查询执行。如果无法跳过并且启用了设置,则将引发异常。
可能的值:
默认值:0
通过避免在启动器服务器上进行昂贵的聚合(这将减少启动器服务器上的查询的内存使用),来优化GROUP BY sharding_key查询。
支持以下类型的查询(及其所有组合):
SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist
SELECT ... FROM dist GROUP BY sharding_key[, ...]
SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
不支持以下类型的查询(稍后可能会添加对其中一些查询的支持):
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
可能的值:
默认值:0
也可以看看:
如果OPTIMIZE查询未执行合并,则启用或禁用引发异常。
默认情况下,即使未执行任何操作,OPTIMIZE也会成功返回。 通过此设置,您可以区分这些情况并在异常消息中获取原因。
可能的值:
默认值:0。
控制将分布式表中的错误快速归零的方式。 如果某个副本在一段时间内不可用,累积了5个错误,并且distributed_replica_error_half_life设置为1秒,则该副本在上次错误之后3秒钟被视为正常。
也可以看:
每个副本的错误计数均以该值为上限,以防止单个副本累积太多错误。
也可以看看:
选择副本时将忽略的错误数(根据load_balancing
算法)。
也可以看看:
分布式表引擎发送数据的基本间隔。发生错误时,实际间隔将呈指数增长。
可能的值:
默认值:100毫秒。
分布式表引擎发送数据的最大间隔。限制在distributed_directory_monitor_sleep_time_ms设置中设置的间隔的指数增长。
可能的值:
默认值:30000毫秒(30秒)。
启用/禁用插入的数据批量发送。
启用批量发送后,分布式表引擎将尝试通过一项操作发送多个插入数据文件,而不是分别发送。批量发送通过更好地利用服务器和网络资源来提高群集性能。
可能的值:
默认值:0。
为执行查询的线程设置优先级(nice)。选择一个线程,在每个可用的CPU内核上运行时,OS调度器考虑这个优先级。
要使用此设置,您需要设置CAP_SYS_NICE功能。 clickhouse-server软件包会在安装过程中对其进行设置。 某些虚拟环境不允许您设置CAP_SYS_NICE功能。 在这种情况下,clickhouse-server会在开始时显示有关此消息。
可能的值:
[-20, 19]
。较低的值表示较高的优先级。具有低nice
优先级值的线程比具有高优先级值的线程执行得更频繁。高值对于长时间运行的非交互式查询是更可取的,因为它允许它们在到达时迅速放弃资源,而转向短交互式查询。
默认值:0。
设置查询事件探查器的实际时钟计时器的周期。实时时钟计时器计算挂钟时间。
可能的值:
正整数,以纳秒为单位。
推荐值:
- 10000000 (100 times a second) nanoseconds and less for single queries.
- 1000000000 (once a second) for cluster-wide profiling.
0用于关闭计时器。
类型:UInt64。
默认值:1000000000纳秒(每秒)。
也可以看看:
设置查询事件探查器的CPU时钟计时器的周期。此计时器仅计算CPU时间。
可能的值:
正整数纳秒。
推荐值:
- 10000000 (100 times a second) nanoseconds and more for single queries.
- 1000000000 (once a second) for cluster-wide profiling.
0用于关闭计时器。
类型:UInt64。
默认值:1000000000纳秒。
也可以看看:
启用或禁用用于检查性能分析的自省功能。
可能的值:
默认值:0。
也可以看看:
启用数据格式的保留顺序并行解析。仅支持TSV,TKSV,CSV和JSONEachRow格式。
每个线程将并行解析的最小块大小(以字节为单位)。
设置用于输出Avro文件的压缩编解码器。
类型:字符串
可能的值:
null
—无压缩deflate
—使用Deflate压缩(zlib)snappy
—用Snappy压缩默认值:(snappy
如果可用)或deflate
。
设置输出Avro文件的同步标记之间的最小数据大小(以字节为单位)。
类型:unsigned int
可能的值:32(32字节)-1073741824(1 GiB)
默认值:32768(32 KiB)
设置Confluent Schema注册表URL以与AvroConfluent格式一起使用。
默认值:Empty
。
启用使用未在Avro或AvroConfluent格式架构中指定的字段的功能。当在架构中找不到字段时,ClickHouse将使用默认值而不是引发异常。
可能的值:
默认值:0。
设置在表引擎中执行后台操作的线程数(例如,在MergeTree引擎表中的合并)。
此设置是从ClickHouse服务器启动时的默认配置文件中应用的,无法在用户会话中进行更改。 通过调整此设置,可以管理CPU和磁盘负载。 较小的池使用较少的CPU和磁盘资源,但是后台进程的执行速度较慢,这最终可能会影响查询性能。
进行更改之前,还请查看相关的MergeTree设置,例如number_of_free_entries_in_pool_to_lower_max_size_of_merge
和number_of_free_entries_in_pool_to_execute_mutation
。
可能的值:
默认值:16
启用并行分布式INSERT ... SELECT
查询。
如果我们执行INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b
查询,并且两个表都使用相同的集群,并且两个表都是复制的或非复制的,那么此查询将在每个分片上本地处理。
可能的值:
默认值:0。
启用或禁用将同步数据插入分布式表中。
默认情况下,在将数据插入Distributed
表中时,ClickHouse服务器以异步模式将数据发送到群集节点。当insert_distributed_sync = 1时,将同步处理数据,并且仅在将所有数据保存在所有分片上之后(如果internal_replication为true,每个分片至少有一个副本),INSERT操作才会成功。
可能的值:
默认值:0
。
使用紧凑格式将异步(insert_distributed_sync
)INSERT的块存储到带有Distributed
引擎的表中。
可能的值:
user[:password]@host:port#default_database
目录格式。[shard{shard_index}[_replica{replica_index}]]
目录格式。默认值:1
。
注意:
设置在Buffer -engine表中执行后台刷新的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。
可能的值:
默认值:16
设置执行MergeTree引擎表的数据部分后台移动的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。
可能的值:
默认值:8。
设置为复制表,Kafka流,DNS缓存更新执行后台任务的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。
可能的值:
默认值:16
禁止在Replicated * MergeTree -engine表中合并数据部分。
当禁止合并时,副本绝不合并部件,并且始终从其他副本下载合并的部件。如果尚无必需的数据,则副本将等待它。副本服务器上的CPU和磁盘负载减少,但是群集上的网络负载增加。此设置在CPU相对较弱或磁盘速度较慢的服务器(例如用于备份存储的服务器)上很有用。
可能的值:
Replicated*MergeTree
引擎表合并副本中的数据部分。Replicated*MergeTree
engine表不合并副本中的数据部分。这些表从其他副本下载合并的数据部分。默认值:0。
也可以看:
设置为分布式发送执行后台任务的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。
可能的值:
默认值:16
如果多边形是自相交或自相切的,则启用或禁用在pointInPolygon函数中引发异常。
可能的值:
pointInPolygon
接受无效的多边形,并为其返回可能不正确的结果。默认值:1。
为IN运算符启用NULL值的相等性。
默认情况下,无法比较NULL值,因为NULL表示未定义的值。 因此,比较expr = NULL必须始终返回false。 使用此设置NULL = NULL对于IN运算符返回true。
可能值:
0-IN运算符中NULL值的比较返回false。
1-IN运算符中NULL值的比较返回true。
默认:0
举例:
考虑null_in
表:
┌──idx─┬─────i─┐
│ 1 │ 1 │
│ 2 │ NULL │
│ 3 │ 3 │
└──────┴───────┘
查询:
SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0;
结果:
┌──idx─┬────i─┐
│ 1 │ 1 │
└──────┴──────┘
查询:
SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1;
结果:
┌──idx─┬─────i─┐
│ 1 │ 1 │
│ 2 │ NULL │
└──────┴───────┘
在可写入存储文件系统的LowCardinality数据类型的共享全局字典的行中设置最大大小。在无限制的字典增长的情况下,此设置可以防止RAM出现问题。由于最大字典大小的限制,所有无法编码的数据都是ClickHouse用普通方法写入的。
可能的值:
默认值:8192
使用单个字典打开或关闭数据部分。
默认情况下,ClickHouse服务器监视词典的大小,如果词典溢出,则服务器将开始编写下一个词典。 要禁止创建多个词典,请设置low_cardinality_use_single_dictionary_for_part = 1。
可能的值:
默认值:0。
允许或限制将LowCardinality数据类型与本机格式一起使用。
如果限制使用LowCardinality,则ClickHouse服务器将SELECT查询的LowCardinality列转换为普通列,而对于INSERT查询,将普通的列转换为LowCardinality列。
主要对于不支持LowCardinality数据类型的第三方客户端,此设置是必需的。
可能的值:
默认值:1。
允许或限制将LowCardinality用于固定大小为8字节或更小的数据类型:数字数据类型和FixedString(8_bytes_or_less)
。
对于小的固定值,LowCardinality
通常使用of效率低下,因为ClickHouse为每行存储一个数字索引。结果是:
由于上述所有原因,MergeTree -engine表中的合并时间可能会增加。
可能的值:
默认值:0。
设置INSERT
查询中可插入表中的最小行数。较小的块将被压缩为较大的块。
此设置仅适用于插入实例化视图中的块。 通过调整此设置,您可以控制推送到实例化视图时的压缩,并避免过多的内存使用。
可能的值:
默认值:1048576
也可以看看
设置INSERT
查询中可插入表中的块中的最小字节数。较小的块将被压缩为较大的块。
此设置仅适用于插入实例化视图中的块。 通过调整此设置,您可以控制推送到实例化视图时的压缩,并避免过多的内存使用。
可能的值:
默认值:268435456
也可以看看
允许更改用于打印网格边框的字符集。可用的字符集为UTF-8,ASCII。
例
SET output_format_pretty_grid_charset = 'UTF-8';
SELECT * FROM a;
┌─a─┐
│ 1 │
└───┘
SET output_format_pretty_grid_charset = 'ASCII';
SELECT * FROM a;
+-a-+
| 1 |
+---+
在SELECT查询中启用ORDER BY优化,以从MergeTree表中读取数据。
可能的值:
ORDER BY
禁用优化。ORDER BY
启用优化。默认值:1
。
也可以看看
允许同步执行ALTER TABLE ... UPDATE|DELETE
查询(变种)。
可能的值:
默认值:0
。
也可以看看
启用或禁用MergeTree表中所有行均已过期的数据部分的完全删除。
当ttl_only_drop_parts
被禁用(默认设置),将ClickHouse服务器只根据自己的TTL删除过期行。
当ttl_only_drop_parts
启用时,当ClickHouse服务器中的所有行都到期时,它将丢弃整个部分。
丢弃整个部件,而不是部分清洁TTL-d行,可以缩短merge_with_ttl_timeout时间,并减少对系统性能的影响。
可能的值:
默认值:0
。
也可以看看
merge_with_ttl_timeout
setting)定义锁定请求失败之前要等待的秒数。
锁定超时用于防止对表执行读/写操作时的死锁。当超时到期且锁定请求失败时,ClickHouse服务器将引发异常"Locking attempt timed out! Possible deadlock avoided. Client should retry."
错误代码DEADLOCK_AVOIDED
。
可能的值:
默认值:120
秒。
启用或禁用在CAST操作中保留Nullable数据类型。
当启用该设置并且CAST函数的参数为Nullable时,结果也将转换为Nullable类型。 禁用设置后,结果始终具有完全相同的目标类型。
可能的值:
默认值:0。
例子
以下查询将精确地得出目标数据类型:
SET cast_keep_nullable = 0;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);
结果:
┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Int32 │
└───┴───────────────────────────────────────────────────┘
以下查询导致Nullable对目标数据类型进行修改:
SET cast_keep_nullable = 1;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);
结果:
┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Nullable(Int32) │
└───┴───────────────────────────────────────────────────┘
也可以看看
限制以Pretty格式显示的值的宽度。如果值的宽度超出限制,则将剪切该值。
可能的值:
默认值:10000字符
查询:
SET output_format_pretty_max_value_width = 10;
SELECT range(number) FROM system.numbers LIMIT 10 FORMAT PrettyCompactNoEscapes;
结果:
┌─range(number)─┐
│ [] │
│ [0] │
│ [0,1] │
│ [0,1,2] │
│ [0,1,2,3] │
│ [0,1,2,3,4⋯ │
│ [0,1,2,3,4⋯ │
│ [0,1,2,3,4⋯ │
│ [0,1,2,3,4⋯ │
│ [0,1,2,3,4⋯ │
└───────────────┘
查询宽度为零:
SET output_format_pretty_max_value_width = 0;
SELECT range(number) FROM system.numbers LIMIT 5 FORMAT PrettyCompactNoEscapes;
结果:
┌─range(number)─┐
│ ⋯ │
│ ⋯ │
│ ⋯ │
│ ⋯ │
│ ⋯ │
└───────────────┘
添加行号以“ Pretty”格式输出。
可能的值:
默认值:0
。
例
查询:
SET output_format_pretty_row_numbers = 1;
SELECT TOP 3 name, value FROM system.settings;
结果:
┌─name────────────────────┬─value───┐
1. │ min_compress_block_size │ 65536 │
2. │ max_compress_block_size │ 1048576 │
3. │ max_block_size │ 65505 │
└─────────────────────────┴─────────┘
启用或禁用超出int数据类型支持的范围的整数值。
可能的值:
默认值:0
。
禁用“ Set”和" Join "表引擎的持久性。
减少I / O开销。适用于追求性能且不需要持久性的场景。
可能的值:
默认值:1
。
允许TSV输出格式的可配置NULL表示。 该设置仅控制输出格式,\ N是TSV输入格式唯一受支持的NULL表示形式。
默认值:\N
。