settings.md 89.8 KB
Newer Older
1
# Settings {#settings}
2

A
Alexey Milovidov 已提交
3
## distributed_product_mode {#distributed-product-mode}
4

5
Changes the behaviour of [distributed subqueries](../../sql-reference/operators/in.md).
6

7
ClickHouse applies this setting when the query contains the product of distributed tables, i.e. when the query for a distributed table contains a non-GLOBAL subquery for the distributed table.
8 9 10

Restrictions:

11 12 13
-   Only applied for IN and JOIN subqueries.
-   Only if the FROM section uses a distributed table containing more than one shard.
-   If the subquery concerns a distributed table containing more than one shard.
14
-   Not used for a table-valued [remote](../../sql-reference/table-functions/remote.md) function.
15

16
Possible values:
17

18 19 20 21
-   `deny` — Default value. Prohibits using these types of subqueries (returns the “Double-distributed in/JOIN subqueries is denied” exception).
-   `local` — Replaces the database and table in the subquery with local ones for the destination server (shard), leaving the normal `IN`/`JOIN.`
-   `global` — Replaces the `IN`/`JOIN` query with `GLOBAL IN`/`GLOBAL JOIN.`
-   `allow` — Allows the use of these types of subqueries.
22

A
Alexey Milovidov 已提交
23
## enable_optimize_predicate_expression {#enable-optimize-predicate-expression}
24

25
Turns on predicate pushdown in `SELECT` queries.
26

27
Predicate pushdown may significantly reduce network traffic for distributed queries.
28 29 30

Possible values:

31 32
-   0 — Disabled.
-   1 — Enabled.
33

F
filimonov 已提交
34
Default value: 1.
35

S
Fixes  
Sergei Bocharov 已提交
36
Usage
37

38
Consider the following queries:
39

40 41
1.  `SELECT count() FROM test_table WHERE date = '2018-10-10'`
2.  `SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'`
42

43
If `enable_optimize_predicate_expression = 1`, then the execution time of these queries is equal because ClickHouse applies `WHERE` to the subquery when processing it.
44

45
If `enable_optimize_predicate_expression = 0`, then the execution time of the second query is much longer because the `WHERE` clause applies to all the data after the subquery finishes.
46

A
Alexey Milovidov 已提交
47
## fallback_to_stale_replicas_for_distributed_queries {#settings-fallback_to_stale_replicas_for_distributed_queries}
48

49
Forces a query to an out-of-date replica if updated data is not available. See [Replication](../../engines/table-engines/mergetree-family/replication.md).
50 51 52

ClickHouse selects the most relevant from the outdated replicas of the table.

53
Used when performing `SELECT` from a distributed table that points to replicated tables.
54 55 56

By default, 1 (enabled).

A
Alexey Milovidov 已提交
57
## force_index_by_date {#settings-force_index_by_date}
58

59
Disables query execution if the index can’t be used by date.
60 61 62

Works with tables in the MergeTree family.

63
If `force_index_by_date=1`, ClickHouse checks whether the query has a date key condition that can be used for restricting data ranges. If there is no suitable condition, it throws an exception. However, it does not check whether the condition reduces the amount of data to read. For example, the condition `Date != ' 2000-01-01 '` is acceptable even when it matches all the data in the table (i.e., running the query requires a full scan). For more information about ranges of data in MergeTree tables, see [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md).
64

A
Alexey Milovidov 已提交
65
## force_primary_key {#force-primary-key}
66 67 68 69 70

Disables query execution if indexing by the primary key is not possible.

Works with tables in the MergeTree family.

71
If `force_primary_key=1`, ClickHouse checks to see if the query has a primary key condition that can be used for restricting data ranges. If there is no suitable condition, it throws an exception. However, it does not check whether the condition reduces the amount of data to read. For more information about data ranges in MergeTree tables, see [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md).
72

A
Alexey Milovidov 已提交
73
## force_data_skipping_indices {#settings-force_data_skipping_indices}
74 75 76

Disables query execution if passed data skipping indices wasn't used.

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
Consider the following example:

```sql
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=''; -- query will produce CANNOT_PARSE_TEXT error.
SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- query will produce INDEX_NOT_USED error.
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 (example of full featured parser).
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- query will produce INDEX_NOT_USED error, since d1_null_idx is not used.
SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- Ok.
```

100 101
Works with tables in the MergeTree family.

A
Alexey Milovidov 已提交
102
## format_schema {#format-schema}
A
Alexander Tokmakov 已提交
103

104
This parameter is useful when you are using formats that require a schema definition, such as [Cap’n Proto](https://capnproto.org/) or [Protobuf](https://developers.google.com/protocol-buffers/). The value depends on the format.
105

A
Alexey Milovidov 已提交
106
## fsync_metadata {#fsync-metadata}
107

108
Enables or disables [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) when writing `.sql` files. Enabled by default.
109

A
alexey-milovidov 已提交
110
It makes sense to disable it if the server has millions of tiny tables that are constantly being created and destroyed.
111

A
Alexey Milovidov 已提交
112
## enable_http_compression {#settings-enable_http_compression}
113

114
Enables or disables data compression in the response to an HTTP request.
115 116 117 118 119

For more information, read the [HTTP interface description](../../interfaces/http.md).

Possible values:

120 121
-   0 — Disabled.
-   1 — Enabled.
122 123 124

Default value: 0.

A
Alexey Milovidov 已提交
125
## http_zlib_compression_level {#settings-http_zlib_compression_level}
126

A
Alexey Milovidov 已提交
127
Sets the level of data compression in the response to an HTTP request if [enable_http_compression = 1](#settings-enable_http_compression).
128

129
Possible values: Numbers from 1 to 9.
130 131 132

Default value: 3.

A
Alexey Milovidov 已提交
133
## http_native_compression_disable_checksumming_on_decompress {#settings-http_native_compression_disable_checksumming_on_decompress}
134

135
Enables or disables checksum verification when decompressing the HTTP POST data from the client. Used only for ClickHouse native compression format (not used with `gzip` or `deflate`).
136 137 138 139 140

For more information, read the [HTTP interface description](../../interfaces/http.md).

Possible values:

141 142
-   0 — Disabled.
-   1 — Enabled.
143 144 145

Default value: 0.

A
Alexey Milovidov 已提交
146
## send_progress_in_http_headers {#settings-send_progress_in_http_headers}
147

148
Enables or disables `X-ClickHouse-Progress` HTTP response headers in `clickhouse-server` responses.
149 150 151 152 153

For more information, read the [HTTP interface description](../../interfaces/http.md).

Possible values:

154 155
-   0 — Disabled.
-   1 — Enabled.
156 157 158

Default value: 0.

A
Alexey Milovidov 已提交
159
## max_http_get_redirects {#setting-max_http_get_redirects}
160

161
Limits the maximum number of HTTP GET redirect hops for [URL](../../engines/table-engines/special/url.md)-engine tables. The setting applies to both types of tables: those created by the [CREATE TABLE](../../sql-reference/statements/create/table.md) query and by the [url](../../sql-reference/table-functions/url.md) table function.
162 163 164

Possible values:

165 166
-   Any positive integer number of hops.
-   0 — No hops allowed.
167 168 169

Default value: 0.

A
Alexey Milovidov 已提交
170
## input_format_allow_errors_num {#settings-input_format_allow_errors_num}
171 172 173 174 175

Sets the maximum number of acceptable errors when reading from text formats (CSV, TSV, etc.).

The default value is 0.

A
Alexander Tokmakov 已提交
176
Always pair it with `input_format_allow_errors_ratio`.
177 178 179

If an error occurred while reading rows but the error counter is still less than `input_format_allow_errors_num`, ClickHouse ignores the row and moves on to the next one.

A
Alexander Tokmakov 已提交
180
If both `input_format_allow_errors_num` and `input_format_allow_errors_ratio` are exceeded, ClickHouse throws an exception.
181

A
Alexey Milovidov 已提交
182
## input_format_allow_errors_ratio {#settings-input_format_allow_errors_ratio}
183 184 185 186 187 188

Sets the maximum percentage of errors allowed when reading from text formats (CSV, TSV, etc.).
The percentage of errors is set as a floating-point number between 0 and 1.

The default value is 0.

A
Alexander Tokmakov 已提交
189
Always pair it with `input_format_allow_errors_num`.
190 191 192

If an error occurred while reading rows but the error counter is still less than `input_format_allow_errors_ratio`, ClickHouse ignores the row and moves on to the next one.

A
Alexander Tokmakov 已提交
193
If both `input_format_allow_errors_num` and `input_format_allow_errors_ratio` are exceeded, ClickHouse throws an exception.
194

A
Alexey Milovidov 已提交
195
## input_format_values_interpret_expressions {#settings-input_format_values_interpret_expressions}
196

197
Enables or disables the full SQL parser if the fast stream parser can’t parse the data. This setting is used only for the [Values](../../interfaces/formats.md#data-format-values) format at the data insertion. For more information about syntax parsing, see the [Syntax](../../sql-reference/syntax.md) section.
198 199 200

Possible values:

201
-   0 — Disabled.
202

203
    In this case, you must provide formatted data. See the [Formats](../../interfaces/formats.md) section.
204

205
-   1 — Enabled.
206

207
    In this case, you can use an SQL expression as a value, but data insertion is much slower this way. If you insert only formatted data, then ClickHouse behaves as if the setting value is 0.
208 209 210

Default value: 1.

S
Fixes  
Sergei Bocharov 已提交
211
Example of Use
212

213
Insert the [DateTime](../../sql-reference/data-types/datetime.md) type value with the different settings.
214

215
``` sql
216 217
SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t VALUES (now())
218
```
S
Fixes  
Sergei Bocharov 已提交
219

220
``` text
221 222 223 224
Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1)
```

225
``` sql
226 227
SET input_format_values_interpret_expressions = 1;
INSERT INTO datetime_t VALUES (now())
228
```
S
Fixes  
Sergei Bocharov 已提交
229

230
``` text
231 232 233
Ok.
```

234
The last query is equivalent to the following:
235

236
``` sql
237 238
SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t SELECT now()
239
```
S
Fixes  
Sergei Bocharov 已提交
240

241
``` text
242 243 244
Ok.
```

A
Alexey Milovidov 已提交
245
## input_format_values_deduce_templates_of_expressions {#settings-input_format_values_deduce_templates_of_expressions}
S
Fixes  
Sergei Bocharov 已提交
246

247
Enables or disables template deduction for SQL expressions in [Values](../../interfaces/formats.md#data-format-values) format. It allows parsing and interpreting expressions in `Values` much faster if expressions in consecutive rows have the same structure. ClickHouse tries to deduce the template of an expression, parse the following rows using this template and evaluate the expression on a batch of successfully parsed rows.
B
BayoNet 已提交
248 249 250 251 252 253 254 255 256

Possible values:

-   0 — Disabled.
-   1 — Enabled.

Default value: 1.

For the following query:
S
Fixes  
Sergei Bocharov 已提交
257

258
``` sql
A
Alexander Tokmakov 已提交
259
INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ...
260
```
S
Fixes  
Sergei Bocharov 已提交
261

B
BayoNet 已提交
262 263 264
-   If `input_format_values_interpret_expressions=1` and `format_values_deduce_templates_of_expressions=0`, expressions are interpreted separately for each row (this is very slow for large number of rows).
-   If `input_format_values_interpret_expressions=0` and `format_values_deduce_templates_of_expressions=1`, expressions in the first, second and third rows are parsed using template `lower(String)` and interpreted together, expression in the forth row is parsed with another template (`upper(String)`).
-   If `input_format_values_interpret_expressions=1` and `format_values_deduce_templates_of_expressions=1`, the same as in previous case, but also allows fallback to interpreting expressions separately if it’s not possible to deduce template.
A
Alexander Tokmakov 已提交
265

A
Alexey Milovidov 已提交
266
## input_format_values_accurate_types_of_literals {#settings-input-format-values-accurate-types-of-literals}
S
Fixes  
Sergei Bocharov 已提交
267

268
This setting is used only when `input_format_values_deduce_templates_of_expressions = 1`. Expressions for some column may have the same structure, but contain numeric literals of different types, e.g.
269 270

``` sql
A
Alexander Tokmakov 已提交
271 272 273 274
(..., abs(0), ...),             -- UInt64 literal
(..., abs(3.141592654), ...),   -- Float64 literal
(..., abs(-1), ...),            -- Int64 literal
```
S
Fixes  
Sergei Bocharov 已提交
275

B
BayoNet 已提交
276 277 278 279 280 281 282 283 284 285 286
Possible values:

-   0 — Disabled.

    In this case, ClickHouse may use a more general type for some literals (e.g., `Float64` or `Int64` instead of `UInt64` for `42`), but it may cause overflow and precision issues.

-   1 — Enabled.

    In this case, ClickHouse checks the actual type of literal and uses an expression template of the corresponding type. In some cases, it may significantly slow down expression evaluation in `Values`.

Default value: 1.
A
Alexander Tokmakov 已提交
287

A
Alexey Milovidov 已提交
288
## input_format_defaults_for_omitted_fields {#session_settings-input_format_defaults_for_omitted_fields}
289

290
When performing `INSERT` queries, replace omitted input column values with default values of the respective columns. This option only applies to [JSONEachRow](../../interfaces/formats.md#jsoneachrow), [CSV](../../interfaces/formats.md#csv) and [TabSeparated](../../interfaces/formats.md#tabseparated) formats.
291 292

!!! note "Note"
293
    When this option is enabled, extended table metadata are sent from server to client. It consumes additional computing resources on the server and can reduce performance.
294

295 296
Possible values:

297 298
-   0 — Disabled.
-   1 — Enabled.
299

300
Default value: 1.
301

A
Alexey Milovidov 已提交
302
## input_format_tsv_empty_as_default {#settings-input-format-tsv-empty-as-default}
A
fixes  
Alexander Tokmakov 已提交
303 304 305 306 307

When enabled, replace empty input fields in TSV with default values. For complex default expressions `input_format_defaults_for_omitted_fields` must be enabled too.

Disabled by default.

308
## input_format_tsv_enum_as_number {#settings-input_format_tsv_enum_as_number}
309 310 311

For TSV input format switches to parsing enum values as enum ids.

A
Alexey Milovidov 已提交
312
## input_format_null_as_default {#settings-input-format-null-as-default}
A
Alexander Tokmakov 已提交
313

314
Enables or disables using default values if input data contain `NULL`, but the data type of the corresponding column in not `Nullable(T)` (for text input formats).
A
Alexander Tokmakov 已提交
315

A
Alexey Milovidov 已提交
316
## input_format_skip_unknown_fields {#settings-input-format-skip-unknown-fields}
317

318
Enables or disables skipping insertion of extra data.
319

320
When writing data, ClickHouse throws an exception if input data contain columns that do not exist in the target table. If skipping is enabled, ClickHouse doesn’t insert extra data and doesn’t throw an exception.
321

322 323
Supported formats:

324 325 326 327
-   [JSONEachRow](../../interfaces/formats.md#jsoneachrow)
-   [CSVWithNames](../../interfaces/formats.md#csvwithnames)
-   [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames)
-   [TSKV](../../interfaces/formats.md#tskv)
328 329

Possible values:
330

331 332
-   0 — Disabled.
-   1 — Enabled.
333

334 335
Default value: 0.

A
Alexey Milovidov 已提交
336
## input_format_import_nested_json {#settings-input_format_import_nested_json}
337

338
Enables or disables the insertion of JSON data with nested objects.
339 340 341

Supported formats:

342
-   [JSONEachRow](../../interfaces/formats.md#jsoneachrow)
343 344 345

Possible values:

346 347
-   0 — Disabled.
-   1 — Enabled.
348 349 350

Default value: 0.

S
Fixes  
Sergei Bocharov 已提交
351
See also:
352

353
-   [Usage of Nested Structures](../../interfaces/formats.md#jsoneachrow-nested) with the `JSONEachRow` format.
354

A
Alexey Milovidov 已提交
355
## input_format_with_names_use_header {#settings-input-format-with-names-use-header}
356 357

Enables or disables checking the column order when inserting data.
B
BayoNet 已提交
358

359 360 361
To improve insert performance, we recommend disabling this check if you are sure that the column order of the input data is the same as in the target table.

Supported formats:
362

363 364
-   [CSVWithNames](../../interfaces/formats.md#csvwithnames)
-   [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames)
365 366 367

Possible values:

368 369
-   0 — Disabled.
-   1 — Enabled.
370 371

Default value: 1.
372

A
Alexey Milovidov 已提交
373
## date_time_input_format {#settings-date_time_input_format}
374

375
Allows choosing a parser of the text representation of date and time.
376

377
The setting doesn’t apply to [date and time functions](../../sql-reference/functions/date-time-functions.md).
378 379 380

Possible values:

381
-   `'best_effort'` — Enables extended parsing.
382

383
    ClickHouse can parse the basic `YYYY-MM-DD HH:MM:SS` format and all [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time formats. For example, `'2018-06-08T01:02:03.000Z'`.
384

385
-   `'basic'` — Use basic parser.
386

387
    ClickHouse can parse only the basic `YYYY-MM-DD HH:MM:SS` format. For example, `'2019-08-20 10:18:56'`.
388 389

Default value: `'basic'`.
390

S
Fixes  
Sergei Bocharov 已提交
391
See also:
392

393 394
-   [DateTime data type.](../../sql-reference/data-types/datetime.md)
-   [Functions for working with dates and times.](../../sql-reference/functions/date-time-functions.md)
395

396
## date_time_output_format {#settings-date_time_output_format}
397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420

Allows choosing different output formats of the text representation of date and time.

Possible values:

-   `'simple'` - Simple output format.

    Clickhouse output date and time `YYYY-MM-DD hh:mm:ss` format. For example, `'2019-08-20 10:18:56'`. Calculation is performed according to the data type's time zone (if present) or server time zone.

-   `'iso'` - ISO output format.

    Clickhouse output date and time in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) `YYYY-MM-DDThh:mm:ssZ` format. For example, `'2019-08-20T10:18:56Z'`. Note that output is in UTC (`Z` means UTC).

-   `'unix_timestamp'` - Unix timestamp output format.

    Clickhouse output date and time in [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) format. For example `'1566285536'`.

Default value: `'simple'`.

See also:

-   [DateTime data type.](../../sql-reference/data-types/datetime.md)
-   [Functions for working with dates and times.](../../sql-reference/functions/date-time-functions.md)

A
Alexey Milovidov 已提交
421
## join_default_strictness {#settings-join_default_strictness}
B
BayoNet 已提交
422

423
Sets default strictness for [JOIN clauses](../../sql-reference/statements/select/join.md#select-join).
B
BayoNet 已提交
424

425
Possible values:
B
BayoNet 已提交
426

427 428 429 430
-   `ALL` — If the right table has several matching rows, ClickHouse creates a [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) from matching rows. This is the normal `JOIN` behaviour from standard SQL.
-   `ANY` — If the right table has several matching rows, only the first one found is joined. If the right table has only one matching row, the results of `ANY` and `ALL` are the same.
-   `ASOF` — For joining sequences with an uncertain match.
-   `Empty string` — If `ALL` or `ANY` is not specified in the query, ClickHouse throws an exception.
B
BayoNet 已提交
431

432
Default value: `ALL`.
B
BayoNet 已提交
433

A
Alexey Milovidov 已提交
434
## join_any_take_last_row {#settings-join_any_take_last_row}
435

436
Changes behaviour of join operations with `ANY` strictness.
437

438
!!! warning "Attention"
439
    This setting applies only for `JOIN` operations with [Join](../../engines/table-engines/special/join.md) engine tables.
440 441 442

Possible values:

443 444
-   0 — If the right table has more than one matching row, only the first one found is joined.
-   1 — If the right table has more than one matching row, only the last one found is joined.
445

B
BayoNet 已提交
446
Default value: 0.
447

S
Fixes  
Sergei Bocharov 已提交
448
See also:
449

450
-   [JOIN clause](../../sql-reference/statements/select/join.md#select-join)
451
-   [Join table engine](../../engines/table-engines/special/join.md)
A
Alexey Milovidov 已提交
452
-   [join_default_strictness](#settings-join_default_strictness)
B
BayoNet 已提交
453

A
Alexey Milovidov 已提交
454
## join_use_nulls {#join_use_nulls}
455

456
Sets the type of [JOIN](../../sql-reference/statements/select/join.md) behaviour. When merging tables, empty cells may appear. ClickHouse fills them differently based on this setting.
457

458
Possible values:
459

460
-   0 — The empty cells are filled with the default value of the corresponding field type.
461
-   1 — `JOIN` behaves the same way as in standard SQL. The type of the corresponding field is converted to [Nullable](../../sql-reference/data-types/nullable.md#data_type-nullable), and empty cells are filled with [NULL](../../sql-reference/syntax.md).
462

463 464
Default value: 0.

A
Alexey Milovidov 已提交
465
## partial_merge_join_optimizations {#partial_merge_join_optimizations}
466 467 468

Disables optimizations in partial merge join algorithm for [JOIN](../../sql-reference/statements/select/join.md) queries.

469
By default, this setting enables improvements that could lead to wrong results. If you see suspicious results in your queries, disable optimizations by this setting. Optimizations can be different in different versions of the ClickHouse server.
470 471 472 473 474 475 476 477

Possible values:

-   0 — Optimizations disabled.
-   1 — Optimizations enabled.

Default value: 1.

A
Alexey Milovidov 已提交
478
## partial_merge_join_rows_in_right_blocks {#partial_merge_join_rows_in_right_blocks}
479 480 481 482 483

Limits sizes of right-hand join data blocks in partial merge join algorithm for [JOIN](../../sql-reference/statements/select/join.md) queries.

ClickHouse server:

484
1.  Splits right-hand join data into blocks with up to the specified number of rows.
485 486
2.  Indexes each block with its minimum and maximum values.
3.  Unloads prepared blocks to disk if it is possible.
487 488 489

Possible values:

490
-   Any positive integer. Recommended range of values: \[1000, 100000\].
491 492 493

Default value: 65536.

A
Alexey Milovidov 已提交
494
## join_on_disk_max_files_to_merge {#join_on_disk_max_files_to_merge}
495

496
Limits the number of files allowed for parallel sorting in MergeJoin operations when they are executed on disk.
497 498 499 500 501

The bigger the value of the setting, the more RAM used and the less disk I/O needed.

Possible values:

502
-   Any positive integer, starting from 2.
503 504 505

Default value: 64.

A
Alexey Milovidov 已提交
506
## any_join_distinct_right_table_keys {#any_join_distinct_right_table_keys}
507

508
Enables legacy ClickHouse server behaviour in `ANY INNER|LEFT JOIN` operations.
509 510

!!! note "Warning"
511
    Use this setting only for backward compatibility if your use cases depend on legacy `JOIN` behaviour.
512

513
When the legacy behaviour enabled:
514

515 516
-   Results of `t1 ANY LEFT JOIN t2` and `t2 ANY RIGHT JOIN t1` operations are not equal because ClickHouse uses the logic with many-to-one left-to-right table keys mapping.
-   Results of `ANY INNER JOIN` operations contain all rows from the left table like the `SEMI LEFT JOIN` operations do.
517

518
When the legacy behaviour disabled:
519

520
-   Results of `t1 ANY LEFT JOIN t2` and `t2 ANY RIGHT JOIN t1` operations are equal because ClickHouse uses the logic which provides one-to-many keys mapping in `ANY RIGHT JOIN` operations.
521
-   Results of `ANY INNER JOIN` operations contain one row per key from both the left and right tables.
522 523 524

Possible values:

525 526
-   0 — Legacy behaviour is disabled.
-   1 — Legacy behaviour is enabled.
527 528 529 530 531

Default value: 0.

See also:

532
-   [JOIN strictness](../../sql-reference/statements/select/join.md#join-settings)
533

A
Alexey Milovidov 已提交
534
## temporary_files_codec {#temporary_files_codec}
535 536 537

Sets compression codec for temporary files used in sorting and joining operations on disk.

538
Possible values:
539

540 541
-   LZ4 — [LZ4](https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)) compression is applied.
-   NONE — No compression is applied.
542 543 544

Default value: LZ4.

A
Alexey Milovidov 已提交
545
## max_block_size {#setting-max_block_size}
546

547
In ClickHouse, data is processed by blocks (sets of column parts). The internal processing cycles for a single block are efficient enough, but there are noticeable expenditures on each block. The `max_block_size` setting is a recommendation for what size of the block (in a count of rows) to load from tables. The block size shouldn’t be too small, so that the expenditures on each block are still noticeable, but not too large so that the query with LIMIT that is completed after the first block is processed quickly. The goal is to avoid consuming too much memory when extracting a large number of columns in multiple threads and to preserve at least some cache locality.
548

549
Default value: 65,536.
550 551 552

Blocks the size of `max_block_size` are not always loaded from the table. If it is obvious that less data needs to be retrieved, a smaller block is processed.

A
Alexey Milovidov 已提交
553
## preferred_block_size_bytes {#preferred-block-size-bytes}
554 555 556

Used for the same purpose as `max_block_size`, but it sets the recommended block size in bytes by adapting it to the number of rows in the block.
However, the block size cannot be more than `max_block_size` rows.
557
By default: 1,000,000. It only works when reading from MergeTree engines.
558

A
Alexey Milovidov 已提交
559
## merge_tree_min_rows_for_concurrent_read {#setting-merge-tree-min-rows-for-concurrent-read}
B
BayoNet 已提交
560

561
If the number of rows to be read from a file of a [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) table exceeds `merge_tree_min_rows_for_concurrent_read` then ClickHouse tries to perform a concurrent reading from this file on several threads.
B
BayoNet 已提交
562

563
Possible values:
B
BayoNet 已提交
564

565
-   Any positive integer.
566 567 568

Default value: 163840.

A
Alexey Milovidov 已提交
569
## merge_tree_min_bytes_for_concurrent_read {#setting-merge-tree-min-bytes-for-concurrent-read}
570

571
If the number of bytes to read from one file of a [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)-engine table exceeds `merge_tree_min_bytes_for_concurrent_read`, then ClickHouse tries to concurrently read from this file in several threads.
572

573
Possible value:
574

575
-   Any positive integer.
B
BayoNet 已提交
576

577
Default value: 251658240.
B
BayoNet 已提交
578

A
Alexey Milovidov 已提交
579
## merge_tree_min_rows_for_seek {#setting-merge-tree-min-rows-for-seek}
B
BayoNet 已提交
580

581
If the distance between two data blocks to be read in one file is less than `merge_tree_min_rows_for_seek` rows, then ClickHouse does not seek through the file but reads the data sequentially.
B
BayoNet 已提交
582

583
Possible values:
B
BayoNet 已提交
584

585
-   Any positive integer.
586 587 588

Default value: 0.

A
Alexey Milovidov 已提交
589
## merge_tree_min_bytes_for_seek {#setting-merge-tree-min-bytes-for-seek}
590

591
If the distance between two data blocks to be read in one file is less than `merge_tree_min_bytes_for_seek` bytes, then ClickHouse sequentially reads a range of file that contains both blocks, thus avoiding extra seek.
592 593 594

Possible values:

595
-   Any positive integer.
596 597

Default value: 0.
B
BayoNet 已提交
598

A
Alexey Milovidov 已提交
599
## merge_tree_coarse_index_granularity {#setting-merge-tree-coarse-index-granularity}
B
BayoNet 已提交
600

601
When searching for data, ClickHouse checks the data marks in the index file. If ClickHouse finds that required keys are in some range, it divides this range into `merge_tree_coarse_index_granularity` subranges and searches the required keys there recursively.
B
BayoNet 已提交
602

603
Possible values:
B
BayoNet 已提交
604

605
-   Any positive even integer.
B
BayoNet 已提交
606

607
Default value: 8.
B
BayoNet 已提交
608

A
Alexey Milovidov 已提交
609
## merge_tree_max_rows_to_use_cache {#setting-merge-tree-max-rows-to-use-cache}
B
BayoNet 已提交
610

611
If ClickHouse should read more than `merge_tree_max_rows_to_use_cache` rows in one query, it doesn’t use the cache of uncompressed blocks.
B
BayoNet 已提交
612

A
Alexey Milovidov 已提交
613
The cache of uncompressed blocks stores data extracted for queries. ClickHouse uses this cache to speed up responses to repeated small queries. This setting protects the cache from trashing by queries that read a large amount of data. The [uncompressed_cache_size](../../operations/server-configuration-parameters/settings.md#server-settings-uncompressed_cache_size) server setting defines the size of the cache of uncompressed blocks.
614 615 616

Possible values:

617
-   Any positive integer.
618 619

Default value: 128 ✕ 8192.
B
BayoNet 已提交
620

A
Alexey Milovidov 已提交
621
## merge_tree_max_bytes_to_use_cache {#setting-merge-tree-max-bytes-to-use-cache}
622

623
If ClickHouse should read more than `merge_tree_max_bytes_to_use_cache` bytes in one query, it doesn’t use the cache of uncompressed blocks.
624

A
Alexey Milovidov 已提交
625
The cache of uncompressed blocks stores data extracted for queries. ClickHouse uses this cache to speed up responses to repeated small queries. This setting protects the cache from trashing by queries that read a large amount of data. The [uncompressed_cache_size](../../operations/server-configuration-parameters/settings.md#server-settings-uncompressed_cache_size) server setting defines the size of the cache of uncompressed blocks.
626

627
Possible value:
628

629
-   Any positive integer.
B
BayoNet 已提交
630

631
Default value: 2013265920.
B
BayoNet 已提交
632

A
Alexey Milovidov 已提交
633
## min_bytes_to_use_direct_io {#settings-min-bytes-to-use-direct-io}
634

635
The minimum data volume required for using direct I/O access to the storage disk.
636

637
ClickHouse uses this setting when reading data from tables. If the total storage volume of all the data to be read exceeds `min_bytes_to_use_direct_io` bytes, then ClickHouse reads the data from the storage disk with the `O_DIRECT` option.
638

S
Fixes  
Sergei Bocharov 已提交
639
Possible values:
640

641 642
-   0 — Direct I/O is disabled.
-   Positive integer.
643

S
Fixes  
Sergei Bocharov 已提交
644
Default value: 0.
645

646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
## network_compression_method {#network_compression_method}

Sets the method of data compression that is used for communication between servers and between server and [clickhouse-client](../../interfaces/cli.md).

Possible values:

-   `LZ4` — sets LZ4 compression method.
-   `ZSTD` — sets ZSTD compression method.

Default value: `LZ4`.

**See Also**

-   [network_zstd_compression_level](#network_zstd_compression_level)

## network_zstd_compression_level {#network_zstd_compression_level}

Adjusts the level of ZSTD compression. Used only when [network_compression_method](#network_compression_method) is set to `ZSTD`.

Possible values:

-   Positive integer from 1 to 15.

Default value: `1`.

A
Alexey Milovidov 已提交
671
## log_queries {#settings-log-queries}
672

673
Setting up query logging.
674

A
Alexey Milovidov 已提交
675
Queries sent to ClickHouse with this setup are logged according to the rules in the [query_log](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-query-log) server configuration parameter.
676

S
Fixes  
Sergei Bocharov 已提交
677
Example:
678

679
``` text
S
Fixes  
Sergei Bocharov 已提交
680 681
log_queries=1
```
682

683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
## log_queries_min_query_duration_ms {#settings-log-queries-min-query-duration-ms}

Minimal time for the query to run to get to the following tables:

- `system.query_log`
- `system.query_thread_log`

Only the queries with the following type will get to the log:

- `QUERY_FINISH`
- `EXCEPTION_WHILE_PROCESSING`

-   Type: milliseconds
-   Default value: 0 (any query)

A
Alexey Milovidov 已提交
698
## log_queries_min_type {#settings-log-queries-min-type}
699 700 701 702 703 704 705 706 707 708 709

`query_log` minimal type to log.

Possible values:
- `QUERY_START` (`=1`)
- `QUERY_FINISH` (`=2`)
- `EXCEPTION_BEFORE_START` (`=3`)
- `EXCEPTION_WHILE_PROCESSING` (`=4`)

Default value: `QUERY_START`.

710
Can be used to limit which entities will go to `query_log`, say you are interested only in errors, then you can use `EXCEPTION_WHILE_PROCESSING`:
711 712 713 714 715

``` text
log_queries_min_type='EXCEPTION_WHILE_PROCESSING'
```

A
Alexey Milovidov 已提交
716
## log_query_threads {#settings-log-query-threads}
717 718 719

Setting up query threads logging.

A
Alexey Milovidov 已提交
720
Queries’ threads runned by ClickHouse with this setup are logged according to the rules in the [query_thread_log](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-query_thread_log) server configuration parameter.
721

S
Fixes  
Sergei Bocharov 已提交
722
Example:
723

724
``` text
S
Fixes  
Sergei Bocharov 已提交
725 726
log_query_threads=1
```
727

A
Alexey Milovidov 已提交
728
## max_insert_block_size {#settings-max_insert_block_size}
729

730
The size of blocks (in a count of rows) to form for insertion into a table.
731 732
This setting only applies in cases when the server forms the blocks.
For example, for an INSERT via the HTTP interface, the server parses the data format and forms blocks of the specified size.
A
Alexey Milovidov 已提交
733
But when using clickhouse-client, the client parses the data itself, and the ‘max_insert_block_size’ setting on the server doesn’t affect the size of the inserted blocks.
734
The setting also doesn’t have a purpose when using INSERT SELECT, since data is inserted using the same blocks that are formed after SELECT.
735

736
Default value: 1,048,576.
737

738
The default is slightly more than `max_block_size`. The reason for this is because certain table engines (`*MergeTree`) form a data part on the disk for each inserted block, which is a fairly large entity. Similarly, `*MergeTree` tables sort data during insertion, and a large enough block size allow sorting more data in RAM.
739

A
Alexey Milovidov 已提交
740
## min_insert_block_size_rows {#min-insert-block-size-rows}
741

742
Sets the minimum number of rows in the block which can be inserted into a table by an `INSERT` query. Smaller-sized blocks are squashed into bigger ones.
743 744 745

Possible values:

746 747
-   Positive integer.
-   0 — Squashing disabled.
748 749 750

Default value: 1048576.

A
Alexey Milovidov 已提交
751
## min_insert_block_size_bytes {#min-insert-block-size-bytes}
752

753
Sets the minimum number of bytes in the block which can be inserted into a table by an `INSERT` query. Smaller-sized blocks are squashed into bigger ones.
754 755 756

Possible values:

757 758
-   Positive integer.
-   0 — Squashing disabled.
759 760 761

Default value: 268435456.

A
Alexey Milovidov 已提交
762
## max_replica_delay_for_distributed_queries {#settings-max_replica_delay_for_distributed_queries}
763

764
Disables lagging replicas for distributed queries. See [Replication](../../engines/table-engines/mergetree-family/replication.md).
765 766 767

Sets the time in seconds. If a replica lags more than the set value, this replica is not used.

768
Default value: 300.
769

770
Used when performing `SELECT` from a distributed table that points to replicated tables.
771

A
Alexey Milovidov 已提交
772
## max_threads {#settings-max_threads}
773

A
Alexey Milovidov 已提交
774
The maximum number of query processing threads, excluding threads for retrieving data from remote servers (see the ‘max_distributed_connections’ parameter).
775 776

This parameter applies to threads that perform the same stages of the query processing pipeline in parallel.
A
Alexey Milovidov 已提交
777
For example, when reading from a table, if it is possible to evaluate expressions with functions, filter with WHERE and pre-aggregate for GROUP BY in parallel using at least ‘max_threads’ number of threads, then ‘max_threads’ are used.
778

A
alexey-milovidov 已提交
779
Default value: the number of physical CPU cores.
780 781 782

If less than one SELECT query is normally run on a server at a time, set this parameter to a value slightly less than the actual number of processor cores.

A
Alexey Milovidov 已提交
783
For queries that are completed quickly because of a LIMIT, you can set a lower ‘max_threads’. For example, if the necessary number of entries are located in every block and max_threads = 8, then 8 blocks are retrieved, although it would have been enough to read just one.
784 785 786

The smaller the `max_threads` value, the less memory is consumed.

A
Alexey Milovidov 已提交
787
## max_insert_threads {#settings-max-insert-threads}
D
Denis Zhuravlev 已提交
788 789 790 791 792

The maximum number of threads to execute the `INSERT SELECT` query.

Possible values:

793 794
-   0 (or 1) — `INSERT SELECT` no parallel execution.
-   Positive integer. Bigger than 1.
D
Denis Zhuravlev 已提交
795 796 797

Default value: 0.

A
Alexey Milovidov 已提交
798
Parallel `INSERT SELECT` has effect only if the `SELECT` part is executed in parallel, see [max_threads](#settings-max_threads) setting.
D
Denis Zhuravlev 已提交
799 800
Higher values will lead to higher memory usage.

A
Alexey Milovidov 已提交
801
## max_compress_block_size {#max-compress-block-size}
802

803
The maximum size of blocks of uncompressed data before compressing for writing to a table. By default, 1,048,576 (1 MiB). If the size is reduced, the compression rate is significantly reduced, the compression and decompression speed increases slightly due to cache locality, and memory consumption is reduced. There usually isn’t any reason to change this setting.
804

805
Don’t confuse blocks for compression (a chunk of memory consisting of bytes) with blocks for query processing (a set of rows from a table).
806

A
Alexey Milovidov 已提交
807
## min_compress_block_size {#min-compress-block-size}
808

A
Alexey Milovidov 已提交
809
For [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)" tables. In order to reduce latency when processing queries, a block is compressed when writing the next mark if its size is at least ‘min_compress_block_size’. By default, 65,536.
810

A
Alexey Milovidov 已提交
811
The actual size of the block, if the uncompressed data is less than ‘max_compress_block_size’, is no less than this value and no less than the volume of data for one mark.
812

A
Alexey Milovidov 已提交
813
Let’s look at an example. Assume that ‘index_granularity’ was set to 8192 during table creation.
814

A
Alexey Milovidov 已提交
815
We are writing a UInt32-type column (4 bytes per value). When writing 8192 rows, the total will be 32 KB of data. Since min_compress_block_size = 65,536, a compressed block will be formed for every two marks.
816

817
We are writing a URL column with the String type (average size of 60 bytes per value). When writing 8192 rows, the average will be slightly less than 500 KB of data. Since this is more than 65,536, a compressed block will be formed for each mark. In this case, when reading data from the disk in the range of a single mark, extra data won’t be decompressed.
818

819
There usually isn’t any reason to change this setting.
820

A
Alexey Milovidov 已提交
821
## max_query_size {#settings-max_query_size}
822 823 824 825

The maximum part of a query that can be taken to RAM for parsing with the SQL parser.
The INSERT query also contains data for INSERT that is processed by a separate stream parser (that consumes O(1) RAM), which is not included in this restriction.

826
Default value: 256 KiB.
827

A
Alexey Milovidov 已提交
828
## max_parser_depth {#max_parser_depth}
B
BayoNet 已提交
829

830
Limits maximum recursion depth in the recursive descent parser. Allows controlling the stack size.
B
BayoNet 已提交
831 832 833

Possible values:

834 835
-   Positive integer.
-   0 — Recursion depth is unlimited.
B
BayoNet 已提交
836 837 838

Default value: 1000.

A
Alexey Milovidov 已提交
839
## interactive_delay {#interactive-delay}
840

841
The interval in microseconds for checking whether request execution has been cancelled and sending the progress.
842

843
Default value: 100,000 (checks for cancelling and sends the progress ten times per second).
844

A
Alexey Milovidov 已提交
845
## connect_timeout, receive_timeout, send_timeout {#connect-timeout-receive-timeout-send-timeout}
846 847 848

Timeouts in seconds on the socket used for communicating with the client.

849
Default value: 10, 300, 300.
850

A
Alexey Milovidov 已提交
851
## cancel_http_readonly_queries_on_client_close {#cancel-http-readonly-queries-on-client-close}
852

853
Cancels HTTP read-only queries (e.g. SELECT) when a client closes the connection without waiting for the response.
854 855 856

Default value: 0

A
Alexey Milovidov 已提交
857
## poll_interval {#poll-interval}
858 859 860

Lock in a wait loop for the specified number of seconds.

861
Default value: 10.
862

A
Alexey Milovidov 已提交
863
## max_distributed_connections {#max-distributed-connections}
864 865 866

The maximum number of simultaneous connections with remote servers for distributed processing of a single query to a single Distributed table. We recommend setting a value no less than the number of servers in the cluster.

867
Default value: 1024.
868 869 870

The following parameters are only used when creating Distributed tables (and when launching a server), so there is no reason to change them at runtime.

A
Alexey Milovidov 已提交
871
## distributed_connections_pool_size {#distributed-connections-pool-size}
872 873 874

The maximum number of simultaneous connections with remote servers for distributed processing of all queries to a single Distributed table. We recommend setting a value no less than the number of servers in the cluster.

875
Default value: 1024.
876

A
Alexey Milovidov 已提交
877
## connect_timeout_with_failover_ms {#connect-timeout-with-failover-ms}
878

879
The timeout in milliseconds for connecting to a remote server for a Distributed table engine, if the ‘shard’ and ‘replica’ sections are used in the cluster definition.
880 881
If unsuccessful, several attempts are made to connect to various replicas.

882
Default value: 50.
883

A
Alexey Milovidov 已提交
884
## connection_pool_max_wait_ms {#connection-pool-max-wait-ms}
B
BayoNet 已提交
885 886 887 888 889 890 891 892 893 894

The wait time in milliseconds for a connection when the connection pool is full.

Possible values:

- Positive integer.
- 0 — Infinite timeout.

Default value: 0.

A
Alexey Milovidov 已提交
895
## connections_with_failover_max_tries {#connections-with-failover-max-tries}
896

897
The maximum number of connection attempts with each replica for the Distributed table engine.
898

899
Default value: 3.
900

901
## extremes {#extremes}
902 903

Whether to count extreme values (the minimums and maximums in columns of a query result). Accepts 0 or 1. By default, 0 (disabled).
904
For more information, see the section “Extreme values”.
905

A
Alexey Milovidov 已提交
906
## kafka_max_wait_ms {#kafka-max-wait-ms}
B
BayoNet 已提交
907 908 909 910 911 912 913 914 915 916 917 918 919 920

The wait time in milliseconds for reading messages from [Kafka](../../engines/table-engines/integrations/kafka.md#kafka) before retry.

Possible values:

- Positive integer.
- 0 — Infinite timeout.

Default value: 5000.

See also:

-   [Apache Kafka](https://kafka.apache.org/)

A
Alexey Milovidov 已提交
921
## use_uncompressed_cache {#setting-use_uncompressed_cache}
922

923
Whether to use a cache of uncompressed blocks. Accepts 0 or 1. By default, 0 (disabled).
A
Alexey Milovidov 已提交
924
Using the uncompressed cache (only for tables in the MergeTree family) can significantly reduce latency and increase throughput when working with a large number of short queries. Enable this setting for users who send frequent short requests. Also pay attention to the [uncompressed_cache_size](../../operations/server-configuration-parameters/settings.md#server-settings-uncompressed_cache_size) configuration parameter (only set in the config file) – the size of uncompressed cache blocks. By default, it is 8 GiB. The uncompressed cache is filled in as needed and the least-used data is automatically deleted.
925

A
Alexey Milovidov 已提交
926
For queries that read at least a somewhat large volume of data (one million rows or more), the uncompressed cache is disabled automatically to save space for truly small queries. This means that you can keep the ‘use_uncompressed_cache’ setting always set to 1.
927

A
Alexey Milovidov 已提交
928
## replace_running_query {#replace-running-query}
929

A
Alexey Milovidov 已提交
930 931
When using the HTTP interface, the ‘query_id’ parameter can be passed. This is any string that serves as the query identifier.
If a query from the same user with the same ‘query_id’ already exists at this time, the behaviour depends on the ‘replace_running_query’ parameter.
932

A
Alexey Milovidov 已提交
933
`0` (default) – Throw an exception (don’t allow the query to run if a query with the same ‘query_id’ is already running).
934 935 936

`1` – Cancel the old query and start running the new one.

937
Yandex.Metrica uses this parameter set to 1 for implementing suggestions for segmentation conditions. After entering the next character, if the old query hasn’t finished yet, it should be cancelled.
938

A
Alexey Milovidov 已提交
939
## replace_running_query_max_wait_ms {#replace-running-query-max-wait-ms}
B
BayoNet 已提交
940

941
The wait time for running the query with the same `query_id` to finish, when the [replace_running_query](#replace-running-query) setting is active.
B
BayoNet 已提交
942 943 944 945

Possible values:

- Positive integer.
946
- 0 — Throwing an exception that does not allow to run a new query if the server already executes a query with the same `query_id`.
B
BayoNet 已提交
947 948 949

Default value: 5000.

A
Alexey Milovidov 已提交
950
## stream_flush_interval_ms {#stream-flush-interval-ms}
951

A
Alexey Milovidov 已提交
952
Works for tables with streaming in the case of a timeout, or when a thread generates [max_insert_block_size](#settings-max_insert_block_size) rows.
953 954 955 956 957

The default value is 7500.

The smaller the value, the more often data is flushed into the table. Setting the value too low leads to poor performance.

A
Alexey Milovidov 已提交
958
## load_balancing {#settings-load_balancing}
959

960
Specifies the algorithm of replicas selection that is used for distributed query processing.
961

962
ClickHouse supports the following algorithms of choosing replicas:
963

964 965 966 967
-   [Random](#load_balancing-random) (by default)
-   [Nearest hostname](#load_balancing-nearest_hostname)
-   [In order](#load_balancing-in_order)
-   [First or random](#load_balancing-first_or_random)
A
Azat Khuzhin 已提交
968
-   [Round robin](#load_balancing-round_robin)
969

970 971
See also:

A
Alexey Milovidov 已提交
972
-   [distributed_replica_max_ignored_errors](#settings-distributed_replica_max_ignored_errors)
973

I
Ivan Blinkov 已提交
974
### Random (by Default) {#load_balancing-random}
975

976
``` sql
977 978
load_balancing = random
```
979

980
The number of errors is counted for each replica. The query is sent to the replica with the fewest errors, and if there are several of these, to anyone of them.
981 982
Disadvantages: Server proximity is not accounted for; if the replicas have different data, you will also get different data.

983
### Nearest Hostname {#load_balancing-nearest_hostname}
984

985
``` sql
986 987
load_balancing = nearest_hostname
```
988

989
The number of errors is counted for each replica. Every 5 minutes, the number of errors is integrally divided by 2. Thus, the number of errors is calculated for a recent time with exponential smoothing. If there is one replica with a minimal number of errors (i.e. errors occurred recently on the other replicas), the query is sent to it. If there are multiple replicas with the same minimal number of errors, the query is sent to the replica with a hostname that is most similar to the server’s hostname in the config file (for the number of different characters in identical positions, up to the minimum length of both hostnames).
990 991

For instance, example01-01-1 and example01-01-2.yandex.ru are different in one position, while example01-01-1 and example01-02-2 differ in two places.
992
This method might seem primitive, but it doesn’t require external data about network topology, and it doesn’t compare IP addresses, which would be complicated for our IPv6 addresses.
993 994 995 996

Thus, if there are equivalent replicas, the closest one by name is preferred.
We can also assume that when sending a query to the same server, in the absence of failures, a distributed query will also go to the same servers. So even if different data is placed on the replicas, the query will return mostly the same results.

997
### In Order {#load_balancing-in_order}
998

999
``` sql
1000 1001
load_balancing = in_order
```
1002

1003
Replicas with the same number of errors are accessed in the same order as they are specified in the configuration.
1004 1005
This method is appropriate when you know exactly which replica is preferable.

1006
### First or Random {#load_balancing-first_or_random}
1007

1008
``` sql
1009 1010 1011
load_balancing = first_or_random
```

1012
This algorithm chooses the first replica in the set or a random replica if the first is unavailable. It’s effective in cross-replication topology setups, but useless in other configurations.
1013

1014
The `first_or_random` algorithm solves the problem of the `in_order` algorithm. With `in_order`, if one replica goes down, the next one gets a double load while the remaining replicas handle the usual amount of traffic. When using the `first_or_random` algorithm, the load is evenly distributed among replicas that are still available.
1015

1016 1017
It's possible to explicitly define what the first replica is by using the setting `load_balancing_first_offset`. This gives more control to rebalance query workloads among replicas.

1018
### Round Robin {#load_balancing-round_robin}
A
Azat Khuzhin 已提交
1019 1020 1021 1022 1023

``` sql
load_balancing = round_robin
```

1024
This algorithm uses a round-robin policy across replicas with the same number of errors (only the queries with `round_robin` policy is accounted).
A
Azat Khuzhin 已提交
1025

A
Alexey Milovidov 已提交
1026
## prefer_localhost_replica {#settings-prefer-localhost-replica}
1027 1028 1029 1030 1031

Enables/disables preferable using the localhost replica when processing distributed queries.

Possible values:

1032
-   1 — ClickHouse always sends a query to the localhost replica if it exists.
A
Alexey Milovidov 已提交
1033
-   0 — ClickHouse uses the balancing strategy specified by the [load_balancing](#settings-load_balancing) setting.
1034 1035 1036

Default value: 1.

1037
!!! warning "Warning"
A
Alexey Milovidov 已提交
1038
    Disable this setting if you use [max_parallel_replicas](#settings-max_parallel_replicas).
1039

A
Alexey Milovidov 已提交
1040
## totals_mode {#totals-mode}
1041

A
Alexey Milovidov 已提交
1042
How to calculate TOTALS when HAVING is present, as well as when max_rows_to_group_by and group_by_overflow_mode = ‘any’ are present.
1043
See the section “WITH TOTALS modifier”.
1044

A
Alexey Milovidov 已提交
1045
## totals_auto_threshold {#totals-auto-threshold}
1046

1047
The threshold for `totals_mode = 'auto'`.
1048
See the section “WITH TOTALS modifier”.
1049

A
Alexey Milovidov 已提交
1050
## max_parallel_replicas {#settings-max_parallel_replicas}
1051 1052 1053 1054 1055

The maximum number of replicas for each shard when executing a query.
For consistency (to get different parts of the same data split), this option only works when the sampling key is set.
Replica lag is not controlled.

1056
## compile {#compile}
1057 1058 1059

Enable compilation of queries. By default, 0 (disabled).

1060
The compilation is only used for part of the query-processing pipeline: for the first stage of aggregation (GROUP BY).
1061
If this portion of the pipeline was compiled, the query may run faster due to the deployment of short cycles and inlining aggregate function calls. The maximum performance improvement (up to four times faster in rare cases) is seen for queries with multiple simple aggregate functions. Typically, the performance gain is insignificant. In very rare cases, it may slow down query execution.
1062

A
Alexey Milovidov 已提交
1063
## min_count_to_compile {#min-count-to-compile}
1064 1065

How many times to potentially use a compiled chunk of code before running compilation. By default, 3.
1066 1067
For testing, the value can be set to 0: compilation runs synchronously and the query waits for the end of the compilation process before continuing execution. For all other cases, use values ​​starting with 1. Compilation normally takes about 5-10 seconds.
If the value is 1 or more, compilation occurs asynchronously in a separate thread. The result will be used as soon as it is ready, including queries that are currently running.
1068 1069

Compiled code is required for each different combination of aggregate functions used in the query and the type of keys in the GROUP BY clause.
1070
The results of the compilation are saved in the build directory in the form of .so files. There is no restriction on the number of compilation results since they don’t use very much space. Old results will be used after server restarts, except in the case of a server upgrade – in this case, the old results are deleted.
1071

A
Alexey Milovidov 已提交
1072
## output_format_json_quote_64bit_integers {#session_settings-output_format_json_quote_64bit_integers}
1073

1074
If the value is true, integers appear in quotes when using JSON\* Int64 and UInt64 formats (for compatibility with most JavaScript implementations); otherwise, integers are output without the quotes.
I
Ivan Zhukov 已提交
1075

A
Alexey Milovidov 已提交
1076
## output_format_json_quote_denormals {#settings-output_format_json_quote_denormals}
1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174

Enables `+nan`, `-nan`, `+inf`, `-inf` outputs in [JSON](../../interfaces/formats.md#json) output format.

Possible values:

-   0 — Disabled.
-   1 — Enabled.

Default value: 0.

**Example**

Consider the following table `account_orders`:

```text
┌─id─┬─name───┬─duration─┬─period─┬─area─┐
│  1 │ Andrew │       20 │      0 │  400 │
│  2 │ John   │       40 │      0 │    0 │
│  3 │ Bob    │       15 │      0 │ -100 │
└────┴────────┴──────────┴────────┴──────┘
```

When `output_format_json_quote_denormals = 0`, the query returns `null` values in output:

```sql
SELECT area/period FROM account_orders FORMAT JSON;
```

```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
        }
}
```

When `output_format_json_quote_denormals = 1`, the query returns:

```json
{
        "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
        }
}
```

A
Alexey Milovidov 已提交
1175
## format_csv_delimiter {#settings-format_csv_delimiter}
I
Ivan Zhukov 已提交
1176

1177
The character is interpreted as a delimiter in the CSV data. By default, the delimiter is `,`.
1178

A
Alexey Milovidov 已提交
1179
## input_format_csv_unquoted_null_literal_as_null {#settings-input_format_csv_unquoted_null_literal_as_null}
A
Alexander Tokmakov 已提交
1180 1181 1182

For CSV input format enables or disables parsing of unquoted `NULL` as literal (synonym for `\N`).

1183
## input_format_csv_enum_as_number {#settings-input_format_csv_enum_as_number}
1184 1185 1186

For CSV input format switches to parsing enum values as enum ids.

A
Alexey Milovidov 已提交
1187
## output_format_csv_crlf_end_of_line {#settings-output-format-csv-crlf-end-of-line}
M
Mikhail Korotov 已提交
1188

1189
Use DOS/Windows-style line separator (CRLF) in CSV instead of Unix style (LF).
M
Mikhail Korotov 已提交
1190

A
Alexey Milovidov 已提交
1191
## output_format_tsv_crlf_end_of_line {#settings-output-format-tsv-crlf-end-of-line}
M
millb 已提交
1192

1193
Use DOC/Windows-style line separator (CRLF) in TSV instead of Unix style (LF).
M
millb 已提交
1194

A
Alexey Milovidov 已提交
1195
## insert_quorum {#settings-insert_quorum}
1196

1197
Enables the quorum writes.
1198

1199 1200
-   If `insert_quorum < 2`, the quorum writes are disabled.
-   If `insert_quorum >= 2`, the quorum writes are enabled.
1201

1202
Default value: 0.
1203

S
Fixes  
Sergei Bocharov 已提交
1204
Quorum writes
1205 1206 1207 1208 1209

`INSERT` succeeds only when ClickHouse manages to correctly write data to the `insert_quorum` of replicas during the `insert_quorum_timeout`. If for any reason the number of replicas with successful writes does not reach the `insert_quorum`, the write is considered failed and ClickHouse will delete the inserted block from all the replicas where data has already been written.

All the replicas in the quorum are consistent, i.e., they contain data from all previous `INSERT` queries. The `INSERT` sequence is linearized.

A
Alexey Milovidov 已提交
1210
When reading the data written from the `insert_quorum`, you can use the [select_sequential_consistency](#settings-select_sequential_consistency) option.
1211

S
Fixes  
Sergei Bocharov 已提交
1212
ClickHouse generates an exception
1213

1214 1215
-   If the number of available replicas at the time of the query is less than the `insert_quorum`.
-   At an attempt to write data when the previous block has not yet been inserted in the `insert_quorum` of replicas. This situation may occur if the user tries to perform an `INSERT` before the previous one with the `insert_quorum` is completed.
1216

S
Fixes  
Sergei Bocharov 已提交
1217
See also:
1218

A
Alexey Milovidov 已提交
1219 1220
-   [insert_quorum_timeout](#settings-insert_quorum_timeout)
-   [select_sequential_consistency](#settings-select_sequential_consistency)
1221

A
Alexey Milovidov 已提交
1222
## insert_quorum_timeout {#settings-insert_quorum_timeout}
1223

1224
Write to a quorum timeout in milliseconds. If the timeout has passed and no write has taken place yet, ClickHouse will generate an exception and the client must repeat the query to write the same block to the same or any other replica.
1225

A
alexey-milovidov 已提交
1226
Default value: 600000 milliseconds (ten minutes).
1227

S
Fixes  
Sergei Bocharov 已提交
1228
See also:
1229

A
Alexey Milovidov 已提交
1230 1231
-   [insert_quorum](#settings-insert_quorum)
-   [select_sequential_consistency](#settings-select_sequential_consistency)
1232

A
Alexey Milovidov 已提交
1233
## select_sequential_consistency {#settings-select_sequential_consistency}
1234

1235 1236 1237
Enables or disables sequential consistency for `SELECT` queries:

Possible values:
1238

1239 1240
-   0 — Disabled.
-   1 — Enabled.
1241

1242
Default value: 0.
1243

S
Fixes  
Sergei Bocharov 已提交
1244
Usage
1245

1246 1247
When sequential consistency is enabled, ClickHouse allows the client to execute the `SELECT` query only for those replicas that contain data from all previous `INSERT` queries executed with `insert_quorum`. If the client refers to a partial replica, ClickHouse will generate an exception. The SELECT query will not include data that has not yet been written to the quorum of replicas.

S
Fixes  
Sergei Bocharov 已提交
1248
See also:
1249

A
Alexey Milovidov 已提交
1250 1251
-   [insert_quorum](#settings-insert_quorum)
-   [insert_quorum_timeout](#settings-insert_quorum_timeout)
1252

A
Alexey Milovidov 已提交
1253
## insert_deduplicate {#settings-insert-deduplicate}
D
Denis Zhuravlev 已提交
1254

1255
Enables or disables block deduplication of `INSERT` (for Replicated\* tables).
D
Denis Zhuravlev 已提交
1256 1257 1258

Possible values:

1259 1260
-   0 — Disabled.
-   1 — Enabled.
D
Denis Zhuravlev 已提交
1261 1262 1263

Default value: 1.

F
Fan() 已提交
1264 1265
By default, blocks inserted into replicated tables by the `INSERT` statement are deduplicated (see [Data Replication](../../engines/table-engines/mergetree-family/replication.md)).

A
Alexey Milovidov 已提交
1266
## deduplicate_blocks_in_dependent_materialized_views {#settings-deduplicate-blocks-in-dependent-materialized-views}
D
Denis Zhuravlev 已提交
1267

1268
Enables or disables the deduplication check for materialized views that receive data from Replicated\* tables.
D
Denis Zhuravlev 已提交
1269 1270 1271

Possible values:

1272 1273
      0 — Disabled.
      1 — Enabled.
D
Denis Zhuravlev 已提交
1274 1275 1276 1277 1278

Default value: 0.

Usage

1279
By default, deduplication is not performed for materialized views but is done upstream, in the source table.
1280 1281
If an INSERTed block is skipped due to deduplication in the source table, there will be no insertion into attached materialized views. This behaviour exists to enable the insertion of highly aggregated data into materialized views, for cases where inserted blocks are the same after materialized view aggregation but derived from different INSERTs into the source table.
At the same time, this behaviour “breaks” `INSERT` idempotency. If an `INSERT` into the main table was successful and `INSERT` into a materialized view failed (e.g. because of communication failure with Zookeeper) a client will get an error and can retry the operation. However, the materialized view won’t receive the second insert because it will be discarded by deduplication in the main (source) table. The setting `deduplicate_blocks_in_dependent_materialized_views` allows for changing this behaviour. On retry, a materialized view will receive the repeat insert and will perform a deduplication check by itself,
1282
ignoring check result for the source table, and will insert rows lost because of the first failure.
D
Denis Zhuravlev 已提交
1283

A
Alexey Milovidov 已提交
1284
## max_network_bytes {#settings-max-network-bytes}
1285

1286
Limits the data volume (in bytes) that is received or transmitted over the network when executing a query. This setting applies to every individual query.
1287 1288 1289

Possible values:

1290 1291
-   Positive integer.
-   0 — Data volume control is disabled.
1292 1293 1294

Default value: 0.

A
Alexey Milovidov 已提交
1295
## max_network_bandwidth {#settings-max-network-bandwidth}
1296

1297
Limits the speed of the data exchange over the network in bytes per second. This setting applies to every query.
1298 1299 1300

Possible values:

1301 1302
-   Positive integer.
-   0 — Bandwidth control is disabled.
1303 1304 1305

Default value: 0.

A
Alexey Milovidov 已提交
1306
## max_network_bandwidth_for_user {#settings-max-network-bandwidth-for-user}
1307

1308
Limits the speed of the data exchange over the network in bytes per second. This setting applies to all concurrently running queries performed by a single user.
1309 1310 1311

Possible values:

1312 1313
-   Positive integer.
-   0 — Control of the data speed is disabled.
1314 1315 1316

Default value: 0.

A
Alexey Milovidov 已提交
1317
## max_network_bandwidth_for_all_users {#settings-max-network-bandwidth-for-all-users}
1318

1319
Limits the speed that data is exchanged at over the network in bytes per second. This setting applies to all concurrently running queries on the server.
1320 1321 1322

Possible values:

1323 1324
-   Positive integer.
-   0 — Control of the data speed is disabled.
1325 1326 1327

Default value: 0.

A
Alexey Milovidov 已提交
1328
## count_distinct_implementation {#settings-count_distinct_implementation}
1329

1330
Specifies which of the `uniq*` functions should be used to perform the [COUNT(DISTINCT …)](../../sql-reference/aggregate-functions/reference/count.md#agg_function-count) construction.
1331 1332 1333

Possible values:

1334 1335 1336 1337 1338
-   [uniq](../../sql-reference/aggregate-functions/reference/uniq.md#agg_function-uniq)
-   [uniqCombined](../../sql-reference/aggregate-functions/reference/uniqcombined.md#agg_function-uniqcombined)
-   [uniqCombined64](../../sql-reference/aggregate-functions/reference/uniqcombined64.md#agg_function-uniqcombined64)
-   [uniqHLL12](../../sql-reference/aggregate-functions/reference/uniqhll12.md#agg_function-uniqhll12)
-   [uniqExact](../../sql-reference/aggregate-functions/reference/uniqexact.md#agg_function-uniqexact)
1339 1340

Default value: `uniqExact`.
I
Ivan Blinkov 已提交
1341

A
Alexey Milovidov 已提交
1342
## skip_unavailable_shards {#settings-skip_unavailable_shards}
1343

1344
Enables or disables silently skipping of unavailable shards.
1345

1346
Shard is considered unavailable if all its replicas are unavailable. A replica is unavailable in the following cases:
1347

1348
-   ClickHouse can’t connect to replica for any reason.
1349

1350
    When connecting to a replica, ClickHouse performs several attempts. If all these attempts fail, the replica is considered unavailable.
1351

1352
-   Replica can’t be resolved through DNS.
1353

1354
    If replica’s hostname can’t be resolved through DNS, it can indicate the following situations:
1355

1356
    -   Replica’s host has no DNS record. It can occur in systems with dynamic DNS, for example, [Kubernetes](https://kubernetes.io), where nodes can be unresolvable during downtime, and this is not an error.
1357

1358
    -   Configuration error. ClickHouse configuration file contains a wrong hostname.
1359 1360 1361

Possible values:

1362
-   1 — skipping enabled.
1363

1364
    If a shard is unavailable, ClickHouse returns a result based on partial data and doesn’t report node availability issues.
1365

1366
-   0 — skipping disabled.
1367

1368
    If a shard is unavailable, ClickHouse throws an exception.
1369

1370 1371
Default value: 0.

A
Alexey Milovidov 已提交
1372
## distributed_group_by_no_merge {#distributed-group-by-no-merge}
1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412

Do not merge aggregation states from different servers for distributed query processing, you can use this in case it is for certain that there are different keys on different shards

Possible values:

-   0 — Disabled (final query processing is done on the initiator node).
-   1 - Do not merge aggregation states from different servers for distributed query processing (query completelly processed on the shard, initiator only proxy the data).
-   2 - Same as 1 but apply `ORDER BY` and `LIMIT` on the initiator (can be used for queries with `ORDER BY` and/or `LIMIT`).

**Example**

```sql
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 
└───────┘
```

```sql
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 
└───────┘
```

Default value: 0

A
Alexey Milovidov 已提交
1413
## optimize_skip_unused_shards {#optimize-skip-unused-shards}
1414

1415 1416 1417 1418
Enables or disables skipping of unused shards for [SELECT](../../sql-reference/statements/select/index.md) queries that have sharding key condition in `WHERE/PREWHERE` (assuming that the data is distributed by sharding key, otherwise does nothing).

Possible values:

1419 1420
-   0 — Disabled.
-   1 — Enabled.
1421 1422 1423

Default value: 0

1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434
## allow_nondeterministic_optimize_skip_unused_shards {#allow-nondeterministic-optimize-skip-unused-shards}

Allow nondeterministic (like `rand` or `dictGet`, since later has some caveats with updates) functions in sharding key.

Possible values:

-   0 — Disallowed.
-   1 — Allowed.

Default value: 0

A
Alexey Milovidov 已提交
1435
## optimize_skip_unused_shards_nesting {#optimize-skip-unused-shards-nesting}
1436

A
Azat Khuzhin 已提交
1437
Controls [`optimize_skip_unused_shards`](#optimize-skip-unused-shards) (hence still requires [`optimize_skip_unused_shards`](#optimize-skip-unused-shards)) depends on the nesting level of the distributed query (case when you have `Distributed` table that look into another `Distributed` table).
1438 1439 1440

Possible values:

A
Azat Khuzhin 已提交
1441 1442 1443
-   0 — Disabled, `optimize_skip_unused_shards` works always.
-   1 — Enables `optimize_skip_unused_shards` only for the first level.
-   2 — Enables `optimize_skip_unused_shards` up to the second level.
1444 1445 1446

Default value: 0

A
Alexey Milovidov 已提交
1447
## force_optimize_skip_unused_shards {#force-optimize-skip-unused-shards}
1448

A
Alexey Milovidov 已提交
1449
Enables or disables query execution if [optimize_skip_unused_shards](#optimize-skip-unused-shards) is enabled and skipping of unused shards is not possible. If the skipping is not possible and the setting is enabled, an exception will be thrown.
1450 1451 1452

Possible values:

1453
-   0 — Disabled. ClickHouse doesn’t throw an exception.
1454 1455
-   1 — Enabled. Query execution is disabled only if the table has a sharding key.
-   2 — Enabled. Query execution is disabled regardless of whether a sharding key is defined for the table.
1456 1457 1458

Default value: 0

A
Alexey Milovidov 已提交
1459
## force_optimize_skip_unused_shards_nesting {#settings-force_optimize_skip_unused_shards_nesting}
1460

A
Azat Khuzhin 已提交
1461
Controls [`force_optimize_skip_unused_shards`](#force-optimize-skip-unused-shards) (hence still requires [`force_optimize_skip_unused_shards`](#force-optimize-skip-unused-shards)) depends on the nesting level of the distributed query (case when you have `Distributed` table that look into another `Distributed` table).
1462 1463 1464

Possible values:

A
Azat Khuzhin 已提交
1465 1466 1467
-   0 - Disabled, `force_optimize_skip_unused_shards` works always.
-   1 — Enables `force_optimize_skip_unused_shards` only for the first level.
-   2 — Enables `force_optimize_skip_unused_shards` up to the second level.
1468

A
Azat Khuzhin 已提交
1469
Default value: 0
1470

A
Alexey Milovidov 已提交
1471
## optimize_distributed_group_by_sharding_key {#optimize-distributed-group-by-sharding-key}
1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498

Optimize `GROUP BY sharding_key` queries, by avoiding costly aggregation on the initiator server (which will reduce memory usage for the query on the initiator server).

The following types of queries are supported (and all combinations of them):

- `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`

The following types of queries are not supported (support for some of them may be added later):

- `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`

Possible values:

-   0 — Disabled.
-   1 — Enabled.

Default value: 0

See also:

A
Alexey Milovidov 已提交
1499 1500
-   [distributed_group_by_no_merge](#distributed-group-by-no-merge)
-   [optimize_skip_unused_shards](#optimize-skip-unused-shards)
1501 1502 1503 1504

!!! note "Note"
    Right now it requires `optimize_skip_unused_shards` (the reason behind this is that one day it may be enabled by default, and it will work correctly only if data was inserted via Distributed table, i.e. data is distributed according to sharding_key).

A
Alexey Milovidov 已提交
1505
## optimize_throw_if_noop {#setting-optimize_throw_if_noop}
1506

1507
Enables or disables throwing an exception if an [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) query didn’t perform a merge.
1508

1509
By default, `OPTIMIZE` returns successfully even if it didn’t do anything. This setting lets you differentiate these situations and get the reason in an exception message.
1510 1511 1512

Possible values:

1513 1514
-   1 — Throwing an exception is enabled.
-   0 — Throwing an exception is disabled.
1515 1516

Default value: 0.
1517

A
Alexey Milovidov 已提交
1518
## distributed_replica_error_half_life {#settings-distributed_replica_error_half_life}
V
Vasily Nemkov 已提交
1519

1520 1521
-   Type: seconds
-   Default value: 60 seconds
V
Vasily Nemkov 已提交
1522

A
Alexey Milovidov 已提交
1523
Controls how fast errors in distributed tables are zeroed. If a replica is unavailable for some time, accumulates 5 errors, and distributed_replica_error_half_life is set to 1 second, then the replica is considered normal 3 seconds after the last error.
V
Vasily Nemkov 已提交
1524

S
Fixes  
Sergei Bocharov 已提交
1525
See also:
V
Vasily Nemkov 已提交
1526

A
Alexey Milovidov 已提交
1527
-   [load_balancing](#load_balancing-round_robin)
1528
-   [Table engine Distributed](../../engines/table-engines/special/distributed.md)
A
Alexey Milovidov 已提交
1529 1530
-   [distributed_replica_error_cap](#settings-distributed_replica_error_cap)
-   [distributed_replica_max_ignored_errors](#settings-distributed_replica_max_ignored_errors)
V
Vasily Nemkov 已提交
1531

A
Alexey Milovidov 已提交
1532
## distributed_replica_error_cap {#settings-distributed_replica_error_cap}
V
Vasily Nemkov 已提交
1533

1534 1535
-   Type: unsigned int
-   Default value: 1000
V
Vasily Nemkov 已提交
1536

1537
The error count of each replica is capped at this value, preventing a single replica from accumulating too many errors.
V
Vasily Nemkov 已提交
1538

S
Fixes  
Sergei Bocharov 已提交
1539
See also:
V
Vasily Nemkov 已提交
1540

A
Alexey Milovidov 已提交
1541
-   [load_balancing](#load_balancing-round_robin)
1542
-   [Table engine Distributed](../../engines/table-engines/special/distributed.md)
A
Alexey Milovidov 已提交
1543 1544
-   [distributed_replica_error_half_life](#settings-distributed_replica_error_half_life)
-   [distributed_replica_max_ignored_errors](#settings-distributed_replica_max_ignored_errors)
1545

A
Alexey Milovidov 已提交
1546
## distributed_replica_max_ignored_errors {#settings-distributed_replica_max_ignored_errors}
1547 1548 1549 1550

-   Type: unsigned int
-   Default value: 0

1551
The number of errors that will be ignored while choosing replicas (according to `load_balancing` algorithm).
1552 1553 1554

See also:

A
Alexey Milovidov 已提交
1555
-   [load_balancing](#load_balancing-round_robin)
1556
-   [Table engine Distributed](../../engines/table-engines/special/distributed.md)
A
Alexey Milovidov 已提交
1557 1558
-   [distributed_replica_error_cap](#settings-distributed_replica_error_cap)
-   [distributed_replica_error_half_life](#settings-distributed_replica_error_half_life)
1559

A
Alexey Milovidov 已提交
1560
## distributed_directory_monitor_sleep_time_ms {#distributed_directory_monitor_sleep_time_ms}
1561

1562
Base interval for the [Distributed](../../engines/table-engines/special/distributed.md) table engine to send data. The actual interval grows exponentially in the event of errors.
1563 1564 1565

Possible values:

1566
-   A positive integer number of milliseconds.
1567 1568 1569

Default value: 100 milliseconds.

A
Alexey Milovidov 已提交
1570
## distributed_directory_monitor_max_sleep_time_ms {#distributed_directory_monitor_max_sleep_time_ms}
1571

A
Alexey Milovidov 已提交
1572
Maximum interval for the [Distributed](../../engines/table-engines/special/distributed.md) table engine to send data. Limits exponential growth of the interval set in the [distributed_directory_monitor_sleep_time_ms](#distributed_directory_monitor_sleep_time_ms) setting.
1573 1574 1575

Possible values:

1576
-   A positive integer number of milliseconds.
1577 1578 1579

Default value: 30000 milliseconds (30 seconds).

A
Alexey Milovidov 已提交
1580
## distributed_directory_monitor_batch_inserts {#distributed_directory_monitor_batch_inserts}
1581

1582
Enables/disables inserted data sending in batches.
1583

1584
When batch sending is enabled, the [Distributed](../../engines/table-engines/special/distributed.md) table engine tries to send multiple files of inserted data in one operation instead of sending them separately. Batch sending improves cluster performance by better-utilizing server and network resources.
1585 1586 1587

Possible values:

1588 1589
-   1 — Enabled.
-   0 — Disabled.
1590

1591
Default value: 0.
1592

A
Alexey Milovidov 已提交
1593
## os_thread_priority {#setting-os-thread-priority}
1594

1595
Sets the priority ([nice](https://en.wikipedia.org/wiki/Nice_(Unix))) for threads that execute queries. The OS scheduler considers this priority when choosing the next thread to run on each available CPU core.
1596 1597

!!! warning "Warning"
1598
    To use this setting, you need to set the `CAP_SYS_NICE` capability. The `clickhouse-server` package sets it up during installation. Some virtual environments don’t allow you to set the `CAP_SYS_NICE` capability. In this case, `clickhouse-server` shows a message about it at the start.
1599 1600 1601

Possible values:

1602
-   You can set values in the range `[-20, 19]`.
1603

1604
Lower values mean higher priority. Threads with low `nice` priority values are executed more frequently than threads with high values. High values are preferable for long-running non-interactive queries because it allows them to quickly give up resources in favour of short interactive queries when they arrive.
1605 1606 1607

Default value: 0.

A
Alexey Milovidov 已提交
1608
## query_profiler_real_time_period_ns {#query_profiler_real_time_period_ns}
1609

1610
Sets the period for a real clock timer of the [query profiler](../../operations/optimizing-performance/sampling-query-profiler.md). Real clock timer counts wall-clock time.
1611 1612 1613

Possible values:

1614
-   Positive integer number, in nanoseconds.
1615

1616
    Recommended values:
1617

1618 1619
            - 10000000 (100 times a second) nanoseconds and less for single queries.
            - 1000000000 (once a second) for cluster-wide profiling.
1620

1621
-   0 for turning off the timer.
1622

1623
Type: [UInt64](../../sql-reference/data-types/int-uint.md).
1624

1625
Default value: 1000000000 nanoseconds (once a second).
1626

S
Fixes  
Sergei Bocharov 已提交
1627
See also:
B
BayoNet 已提交
1628

A
Alexey Milovidov 已提交
1629
-   System table [trace_log](../../operations/system-tables/trace_log.md#system_tables-trace_log)
1630

A
Alexey Milovidov 已提交
1631
## query_profiler_cpu_time_period_ns {#query_profiler_cpu_time_period_ns}
1632

1633
Sets the period for a CPU clock timer of the [query profiler](../../operations/optimizing-performance/sampling-query-profiler.md). This timer counts only CPU time.
1634 1635 1636

Possible values:

1637
-   A positive integer number of nanoseconds.
1638

1639
    Recommended values:
1640

1641 1642
            - 10000000 (100 times a second) nanoseconds and more for single queries.
            - 1000000000 (once a second) for cluster-wide profiling.
1643

1644
-   0 for turning off the timer.
1645

1646
Type: [UInt64](../../sql-reference/data-types/int-uint.md).
1647 1648 1649

Default value: 1000000000 nanoseconds.

S
Fixes  
Sergei Bocharov 已提交
1650
See also:
B
BayoNet 已提交
1651

A
Alexey Milovidov 已提交
1652
-   System table [trace_log](../../operations/system-tables/trace_log.md#system_tables-trace_log)
B
BayoNet 已提交
1653

A
Alexey Milovidov 已提交
1654
## allow_introspection_functions {#settings-allow_introspection_functions}
1655

1656
Enables or disables [introspections functions](../../sql-reference/functions/introspection.md) for query profiling.
1657 1658 1659

Possible values:

1660 1661
-   1 — Introspection functions enabled.
-   0 — Introspection functions disabled.
1662 1663 1664

Default value: 0.

1665 1666
**See Also**

1667
-   [Sampling Query Profiler](../../operations/optimizing-performance/sampling-query-profiler.md)
A
Alexey Milovidov 已提交
1668
-   System table [trace_log](../../operations/system-tables/trace_log.md#system_tables-trace_log)
1669

A
Alexey Milovidov 已提交
1670
## input_format_parallel_parsing {#input-format-parallel-parsing}
N
docs  
Nikita Mikhaylov 已提交
1671

1672 1673
-   Type: bool
-   Default value: True
N
docs  
Nikita Mikhaylov 已提交
1674

1675
Enable order-preserving parallel parsing of data formats. Supported only for TSV, TKSV, CSV, and JSONEachRow formats.
N
docs  
Nikita Mikhaylov 已提交
1676

A
Alexey Milovidov 已提交
1677
## min_chunk_bytes_for_parallel_parsing {#min-chunk-bytes-for-parallel-parsing}
N
docs  
Nikita Mikhaylov 已提交
1678

1679 1680
-   Type: unsigned int
-   Default value: 1 MiB
N
docs  
Nikita Mikhaylov 已提交
1681

A
Alexander Kuzmenkov 已提交
1682
The minimum chunk size in bytes, which each thread will parse in parallel.
1683

A
Alexey Milovidov 已提交
1684
## output_format_avro_codec {#settings-output_format_avro_codec}
A
Andrew Onyshchuk 已提交
1685 1686 1687 1688 1689 1690 1691

Sets the compression codec used for output Avro file.

Type: string

Possible values:

1692 1693 1694
-   `null` — No compression
-   `deflate` — Compress with Deflate (zlib)
-   `snappy` — Compress with [Snappy](https://google.github.io/snappy/)
A
Andrew Onyshchuk 已提交
1695 1696 1697

Default value: `snappy` (if available) or `deflate`.

A
Alexey Milovidov 已提交
1698
## output_format_avro_sync_interval {#settings-output_format_avro_sync_interval}
A
Andrew Onyshchuk 已提交
1699 1700 1701 1702 1703 1704 1705 1706 1707

Sets minimum data size (in bytes) between synchronization markers for output Avro file.

Type: unsigned int

Possible values: 32 (32 bytes) - 1073741824 (1 GiB)

Default value: 32768 (32 KiB)

A
Alexey Milovidov 已提交
1708
## format_avro_schema_registry_url {#format_avro_schema_registry_url}
A
Andrew Onyshchuk 已提交
1709

1710
Sets [Confluent Schema Registry](https://docs.confluent.io/current/schema-registry/index.html) URL to use with [AvroConfluent](../../interfaces/formats.md#data-format-avro-confluent) format.
A
Andrew Onyshchuk 已提交
1711

1712
Default value: `Empty`.
A
Andrew Onyshchuk 已提交
1713

1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724
## input_format_avro_allow_missing_fields {#input_format_avro_allow_missing_fields}

Enables using fields that are not specified in [Avro](../../interfaces/formats.md#data-format-avro) or [AvroConfluent](../../interfaces/formats.md#data-format-avro-confluent) format schema. When a field is not found in the schema, ClickHouse uses the default value instead of throwing an exception.

Possible values:

-   0 — Disabled.
-   1 — Enabled.

Default value: 0.

A
Alexey Milovidov 已提交
1725
## background_pool_size {#background_pool_size}
1726

1727
Sets the number of threads performing background operations in table engines (for example, merges in [MergeTree engine](../../engines/table-engines/mergetree-family/index.md) tables). This setting is applied from the `default` profile at the ClickHouse server start and can’t be changed in a user session. By adjusting this setting, you manage CPU and disk load. Smaller pool size utilizes less CPU and disk resources, but background processes advance slower which might eventually impact query performance.
1728

A
alesapin 已提交
1729
Before changing it, please also take a look at related [MergeTree settings](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-merge_tree), such as `number_of_free_entries_in_pool_to_lower_max_size_of_merge` and `number_of_free_entries_in_pool_to_execute_mutation`.
1730 1731 1732 1733 1734 1735 1736

Possible values:

-   Any positive integer.

Default value: 16.

1737 1738
## parallel_distributed_insert_select {#parallel_distributed_insert_select}

1739
Enables parallel distributed `INSERT ... SELECT` query.
1740 1741 1742 1743 1744 1745

If we execute `INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b` queries and both tables use the same cluster, and both tables are either [replicated](../../engines/table-engines/mergetree-family/replication.md) or non-replicated, then this query is processed locally on every shard.

Possible values:

-   0 — Disabled.
1746 1747
-   1 — `SELECT` will be executed on each shard from the underlying table of the distributed engine.
-   2 — `SELECT` and `INSERT` will be executed on each shard from/to the underlying table of the distributed engine.
1748 1749 1750

Default value: 0.

1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767
## insert_distributed_sync {#insert_distributed_sync}

Enables or disables synchronous data insertion into a [Distributed](../../engines/table-engines/special/distributed.md#distributed) table.

By default, when inserting data into a `Distributed` table, the ClickHouse server sends data to cluster nodes in asynchronous mode. When `insert_distributed_sync=1`, the data is processed synchronously, and the `INSERT` operation succeeds only after all the data is saved on all shards (at least one replica for each shard if `internal_replication` is true). 

Possible values:

-   0 — Data is inserted in asynchronous mode.
-   1 — Data is inserted in synchronous mode.

Default value: `0`.

**See Also**

-   [Distributed Table Engine](../../engines/table-engines/special/distributed.md#distributed)
-   [Managing Distributed Tables](../../sql-reference/statements/system.md#query-language-system-distributed)
A
Alexey Milovidov 已提交
1768
## background_buffer_flush_schedule_pool_size {#background_buffer_flush_schedule_pool_size}
1769

1770
Sets the number of threads performing background flush in [Buffer](../../engines/table-engines/special/buffer.md)-engine tables. This setting is applied at the ClickHouse server start and can’t be changed in a user session.
1771

1772 1773 1774 1775 1776 1777
Possible values:

-   Any positive integer.

Default value: 16.

A
Alexey Milovidov 已提交
1778
## background_move_pool_size {#background_move_pool_size}
1779

1780
Sets the number of threads performing background moves of data parts for [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes)-engine tables. This setting is applied at the ClickHouse server start and can’t be changed in a user session.
1781 1782 1783 1784 1785 1786 1787

Possible values:

-   Any positive integer.

Default value: 8.

A
Alexey Milovidov 已提交
1788
## background_schedule_pool_size {#background_schedule_pool_size}
1789

1790
Sets the number of threads performing background tasks for [replicated](../../engines/table-engines/mergetree-family/replication.md) tables, [Kafka](../../engines/table-engines/integrations/kafka.md) streaming, [DNS cache updates](../../operations/server-configuration-parameters/settings.md#server-settings-dns-cache-update-period). This setting is applied at ClickHouse server start and can’t be changed in a user session.
1791 1792 1793 1794 1795 1796 1797

Possible values:

-   Any positive integer.

Default value: 16.

A
Alexey Milovidov 已提交
1798
## always_fetch_merged_part {#always_fetch_merged_part}
1799

1800
Prohibits data parts merging in [Replicated\*MergeTree](../../engines/table-engines/mergetree-family/replication.md)-engine tables.
1801

1802
When merging is prohibited, the replica never merges parts and always downloads merged parts from other replicas. If there is no required data yet, the replica waits for it. CPU and disk load on the replica server decreases, but the network load on the cluster increases. This setting can be useful on servers with relatively weak CPUs or slow disks, such as servers for backups storage.
1803 1804 1805 1806

Possible values:

-   0 — `Replicated*MergeTree`-engine tables merge data parts at the replica.
1807
-   1 — `Replicated*MergeTree`-engine tables don’t merge data parts at the replica. The tables download merged data parts from other replicas.
1808 1809 1810

Default value: 0.

1811
**See Also**
1812 1813 1814

-   [Data Replication](../../engines/table-engines/mergetree-family/replication.md)

A
Alexey Milovidov 已提交
1815
## background_distributed_schedule_pool_size {#background_distributed_schedule_pool_size}
1816

1817
Sets the number of threads performing background tasks for [distributed](../../engines/table-engines/special/distributed.md) sends. This setting is applied at the ClickHouse server start and can’t be changed in a user session.
1818 1819 1820 1821 1822

Possible values:

-   Any positive integer.

1823 1824
Default value: 16.

A
Alexey Milovidov 已提交
1825
## validate_polygons {#validate_polygons}
1826

1827
Enables or disables throwing an exception in the [pointInPolygon](../../sql-reference/functions/geo/index.md#pointinpolygon) function, if the polygon is self-intersecting or self-tangent.
1828 1829 1830 1831 1832 1833 1834 1835

Possible values:

- 0 — Throwing an exception is disabled. `pointInPolygon` accepts invalid polygons and returns possibly incorrect results for them.
- 1 — Throwing an exception is enabled.

Default value: 1.

A
Alexey Milovidov 已提交
1836
## transform_null_in {#transform_null_in}
B
BayoNet 已提交
1837 1838 1839

Enables equality of [NULL](../../sql-reference/syntax.md#null-literal) values for [IN](../../sql-reference/operators/in.md) operator.

1840
By default, `NULL` values can’t be compared because `NULL` means undefined value. Thus, comparison `expr = NULL` must always return `false`. With this setting `NULL = NULL` returns `true` for `IN` operator.
B
BayoNet 已提交
1841 1842 1843 1844 1845 1846 1847 1848

Possible values:

-   0 — Comparison of `NULL` values in `IN` operator returns `false`.
-   1 — Comparison of `NULL` values in `IN` operator returns `true`.

Default value: 0.

1849
**Example**
B
BayoNet 已提交
1850 1851 1852

Consider the `null_in` table:

1853
``` text
B
BayoNet 已提交
1854 1855 1856 1857 1858 1859 1860 1861 1862
┌──idx─┬─────i─┐
│    1 │     1 │
│    2 │  NULL │
│    3 │     3 │
└──────┴───────┘
```

Query:

1863
``` sql
B
BayoNet 已提交
1864 1865 1866 1867 1868
SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0;
```

Result:

1869
``` text
B
BayoNet 已提交
1870 1871 1872 1873 1874 1875 1876
┌──idx─┬────i─┐
│    1 │    1 │
└──────┴──────┘
```

Query:

1877
``` sql
B
BayoNet 已提交
1878 1879 1880 1881 1882
SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1;
```

Result:

1883
``` text
B
BayoNet 已提交
1884 1885 1886 1887 1888 1889
┌──idx─┬─────i─┐
│    1 │     1 │
│    2 │  NULL │
└──────┴───────┘
```

1890
**See Also**
B
BayoNet 已提交
1891 1892 1893

-   [NULL Processing in IN Operators](../../sql-reference/operators/in.md#in-null-processing)

A
Alexey Milovidov 已提交
1894
## low_cardinality_max_dictionary_size {#low_cardinality_max_dictionary_size}
B
BayoNet 已提交
1895

1896
Sets a maximum size in rows of a shared global dictionary for the [LowCardinality](../../sql-reference/data-types/lowcardinality.md) data type that can be written to a storage file system. This setting prevents issues with RAM in case of unlimited dictionary growth. All the data that can’t be encoded due to maximum dictionary size limitation ClickHouse writes in an ordinary method.
B
BayoNet 已提交
1897 1898 1899 1900 1901 1902 1903

Possible values:

-   Any positive integer.

Default value: 8192.

A
Alexey Milovidov 已提交
1904
## low_cardinality_use_single_dictionary_for_part {#low_cardinality_use_single_dictionary_for_part}
B
BayoNet 已提交
1905 1906 1907

Turns on or turns off using of single dictionary for the data part.

E
Evgeniia Sudarikova 已提交
1908
By default, the ClickHouse server monitors the size of dictionaries and if a dictionary overflows then the server starts to write the next one. To prohibit creating several dictionaries set `low_cardinality_use_single_dictionary_for_part = 1`.
B
BayoNet 已提交
1909 1910 1911

Possible values:

1912 1913
-   1 — Creating several dictionaries for the data part is prohibited.
-   0 — Creating several dictionaries for the data part is not prohibited.
B
BayoNet 已提交
1914 1915 1916

Default value: 0.

A
Alexey Milovidov 已提交
1917
## low_cardinality_allow_in_native_format {#low_cardinality_allow_in_native_format}
B
BayoNet 已提交
1918 1919 1920 1921 1922

Allows or restricts using the [LowCardinality](../../sql-reference/data-types/lowcardinality.md) data type with the [Native](../../interfaces/formats.md#native) format.

If usage of `LowCardinality` is restricted, ClickHouse server converts `LowCardinality`-columns to ordinary ones for `SELECT` queries, and convert ordinary columns to `LowCardinality`-columns for `INSERT` queries.

1923
This setting is required mainly for third-party clients which don’t support `LowCardinality` data type.
B
BayoNet 已提交
1924 1925 1926

Possible values:

1927 1928
-   1 — Usage of `LowCardinality` is not restricted.
-   0 — Usage of `LowCardinality` is restricted.
B
BayoNet 已提交
1929 1930 1931

Default value: 1.

A
Alexey Milovidov 已提交
1932
## allow_suspicious_low_cardinality_types {#allow_suspicious_low_cardinality_types}
B
BayoNet 已提交
1933 1934 1935 1936 1937

Allows or restricts using [LowCardinality](../../sql-reference/data-types/lowcardinality.md) with data types with fixed size of 8 bytes or less: numeric data types and `FixedString(8_bytes_or_less)`.

For small fixed values using of `LowCardinality` is usually inefficient, because ClickHouse stores a numeric index for each row. As a result:

1938 1939 1940
-   Disk space usage can rise.
-   RAM consumption can be higher, depending on a dictionary size.
-   Some functions can work slower due to extra coding/encoding operations.
B
BayoNet 已提交
1941 1942 1943 1944 1945

Merge times in [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)-engine tables can grow due to all the reasons described above.

Possible values:

1946 1947
-   1 — Usage of `LowCardinality` is not restricted.
-   0 — Usage of `LowCardinality` is restricted.
B
BayoNet 已提交
1948 1949 1950

Default value: 0.

A
Alexey Milovidov 已提交
1951
## min_insert_block_size_rows_for_materialized_views {#min-insert-block-size-rows-for-materialized-views}
E
Evgenia Sudarikova 已提交
1952

1953
Sets the minimum number of rows in the block which can be inserted into a table by an `INSERT` query. Smaller-sized blocks are squashed into bigger ones. This setting is applied only for blocks inserted into [materialized view](../../sql-reference/statements/create/view.md). By adjusting this setting, you control blocks squashing while pushing to materialized view and avoid excessive memory usage.
E
Evgenia Sudarikova 已提交
1954 1955 1956 1957 1958 1959 1960 1961 1962 1963

Possible values:

-   Any positive integer.
-   0 — Squashing disabled.

Default value: 1048576.

**See Also**

A
Alexey Milovidov 已提交
1964
-   [min_insert_block_size_rows](#min-insert-block-size-rows)
E
Evgenia Sudarikova 已提交
1965

A
Alexey Milovidov 已提交
1966
## min_insert_block_size_bytes_for_materialized_views {#min-insert-block-size-bytes-for-materialized-views}
E
Evgenia Sudarikova 已提交
1967

1968
Sets the minimum number of bytes in the block which can be inserted into a table by an `INSERT` query. Smaller-sized blocks are squashed into bigger ones. This setting is applied only for blocks inserted into [materialized view](../../sql-reference/statements/create/view.md). By adjusting this setting, you control blocks squashing while pushing to materialized view and avoid excessive memory usage.
E
Evgenia Sudarikova 已提交
1969 1970 1971 1972 1973 1974 1975 1976 1977 1978

Possible values:

-   Any positive integer.
-   0 — Squashing disabled.

Default value: 268435456.

**See also**

A
Alexey Milovidov 已提交
1979
-   [min_insert_block_size_bytes](#min-insert-block-size-bytes)
E
Evgenia Sudarikova 已提交
1980

A
Alexey Milovidov 已提交
1981
## output_format_pretty_grid_charset {#output-format-pretty-grid-charset}
1982

1983
Allows changing a charset which is used for printing grids borders. Available charsets are UTF-8, ASCII.
1984

1985
**Example**
1986

1987
``` text
1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
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 |
+---+
```
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
## optimize_read_in_order {#optimize_read_in_order}

Enables [ORDER BY](../../sql-reference/statements/select/order-by.md#optimize_read_in_order) optimization in [SELECT](../../sql-reference/statements/select/index.md) queries for reading data from [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) tables.

Possible values:

-   0 — `ORDER BY` optimization is disabled. 
-   1 — `ORDER BY` optimization is enabled. 

Default value: `1`.

**See Also**

-   [ORDER BY Clause](../../sql-reference/statements/select/order-by.md#optimize_read_in_order)
2014

2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031
## mutations_sync {#mutations_sync}

Allows to execute `ALTER TABLE ... UPDATE|DELETE` queries ([mutations](../../sql-reference/statements/alter/index.md#mutations)) synchronously.

Possible values:

-   0 - Mutations execute asynchronously. 
-   1 - The query waits for all mutations to complete on the current server. 
-   2 - The query waits for all mutations to complete on all replicas (if they exist).

Default value: `0`.

**See Also**

-   [Synchronicity of ALTER Queries](../../sql-reference/statements/alter/index.md#synchronicity-of-alter-queries)
-   [Mutations](../../sql-reference/statements/alter/index.md#mutations)

2032 2033 2034 2035 2036 2037 2038 2039
## ttl_only_drop_parts {#ttl_only_drop_parts}

Enables or disables complete dropping of data parts where all rows are expired in [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) tables. 

When `ttl_only_drop_parts` is disabled (by default), the ClickHouse server only deletes expired rows according to their TTL. 

When `ttl_only_drop_parts` is enabled, the ClickHouse server drops a whole part when all rows in it are expired. 

2040
Dropping whole parts instead of partial cleaning TTL-d rows allows having shorter `merge_with_ttl_timeout` times and lower impact on system performance.
2041 2042 2043

Possible values:

2044 2045
-   0 — The complete dropping of data parts is disabled.
-   1 — The complete dropping of data parts is enabled.
2046 2047 2048 2049 2050 2051 2052 2053

Default value: `0`.

**See Also** 

-   [CREATE TABLE query clauses and settings](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-query-clauses) (`merge_with_ttl_timeout` setting)
-   [Table TTL](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl)

2054 2055
## lock_acquire_timeout {#lock_acquire_timeout}

2056
Defines how many seconds a locking request waits before failing. 
2057

2058
Locking timeout is used to protect from deadlocks while executing read/write operations with tables. When the timeout expires and the locking request fails, the ClickHouse server throws an exception "Locking attempt timed out! Possible deadlock avoided. Client should retry." with error code `DEADLOCK_AVOIDED`.
2059 2060 2061

Possible values:

2062
-   Positive integer (in seconds).
2063 2064
-   0 — No locking timeout.

2065
Default value: `120` seconds.
2066

2067 2068
## cast_keep_nullable {#cast_keep_nullable}

O
olgarev 已提交
2069
Enables or disables keeping of the `Nullable` data type in [CAST](../../sql-reference/functions/type-conversion-functions.md#type_conversion_function-cast) operations.
2070

2071
When the setting is enabled and the argument of `CAST` function is `Nullable`, the result is also transformed to `Nullable` type. When the setting is disabled, the result always has the destination type exactly.
2072 2073 2074

Possible values:

2075 2076
-  0 — The `CAST` result has exactly the destination type specified.
-  1 — If the argument type is `Nullable`, the `CAST` result is transformed to `Nullable(DestinationDataType)`. 
2077 2078 2079 2080 2081

Default value: `0`.

**Examples** 

2082
The following query results in the destination data type exactly:
2083 2084 2085 2086 2087 2088 2089 2090

```sql
SET cast_keep_nullable = 0;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);
```

Result:

O
Olga Revyakina 已提交
2091
```text
2092 2093 2094 2095 2096
┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Int32                                             │
└───┴───────────────────────────────────────────────────┘
```

2097
The following query results in the `Nullable` modification on the destination data type:
2098 2099 2100 2101 2102 2103 2104 2105

```sql
SET cast_keep_nullable = 1;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);
```

Result:

O
Olga Revyakina 已提交
2106
```text
2107 2108 2109 2110 2111 2112 2113
┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Nullable(Int32)                                   │
└───┴───────────────────────────────────────────────────┘
```

**See Also** 

2114
-   [CAST](../../sql-reference/functions/type-conversion-functions.md#type_conversion_function-cast) function
2115

2116 2117
## output_format_pretty_max_value_width {#output_format_pretty_max_value_width}

2118
Limits the width of value displayed in [Pretty](../../interfaces/formats.md#pretty) formats. If the value width exceeds the limit, the value is cut. 
2119 2120 2121

Possible values:

O
Olga Revyakina 已提交
2122
-   Positive integer. 
2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165
-   0 — The value is cut completely.

Default value: `10000` symbols.

**Examples**

Query:
```sql
SET output_format_pretty_max_value_width = 10;
SELECT range(number) FROM system.numbers LIMIT 10 FORMAT PrettyCompactNoEscapes;
```
Result:
```text
┌─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⋯   │
└───────────────┘
```

Query with zero width:
```sql
SET output_format_pretty_max_value_width = 0;
SELECT range(number) FROM system.numbers LIMIT 5 FORMAT PrettyCompactNoEscapes;
```
Result:
```text
┌─range(number)─┐
│ ⋯             │
│ ⋯             │
│ ⋯             │
│ ⋯             │
│ ⋯             │
└───────────────┘
```

2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193
## output_format_pretty_row_numbers {#output_format_pretty_row_numbers}

Adds row numbers to output in the [Pretty](../../interfaces/formats.md#pretty) format.

Possible values:

-   0 — Output without row numbers.
-   1 — Output with row numbers.

Default value: `0`.

**Example**

Query:

```sql
SET output_format_pretty_row_numbers = 1;
SELECT TOP 3 name, value FROM system.settings;
```

Result:
```text
   ┌─name────────────────────┬─value───┐
1. │ min_compress_block_size │ 65536   │
2. │ max_compress_block_size │ 1048576 │
3. │ max_block_size          │ 65505   │
   └─────────────────────────┴─────────┘
```
2194 2195 2196 2197 2198 2199 2200 2201 2202 2203

## allow_experimental_bigint_types {#allow_experimental_bigint_types}

Enables or disables integer values exceeding the range that is supported by the int data type.

Possible values:

-   1 — The bigint data type is enabled.
-   0 — The bigint data type is disabled.

2204
Default value: `0`.
2205

2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218
## persistent {#persistent}

Disables persistency for the [Set](../../engines/table-engines/special/set.md#set) and [Join](../../engines/table-engines/special/join.md#join) table engines. 

Reduces the I/O overhead. Suitable for scenarios that pursue performance and do not require persistence.

Possible values:

- 1 — Enabled.
- 0 — Disabled.

Default value: `1`.

2219
[Original article](https://clickhouse.tech/docs/en/operations/settings/settings/) <!-- hide -->