mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
Merge branch 'master' into int-monotonicity-cleanups
This commit is contained in:
commit
a831cba235
@ -48,7 +48,7 @@ SELECT
|
||||
|
||||
## Working with data types
|
||||
|
||||
When creating an array on the fly, ClickHouse automatically defines the argument type as the narrowest data type that can store all the listed arguments. If there are any [NULL](../query_language/syntax.md#null-literal) or [Nullable](nullable.md#data_type-nullable) type arguments, the type of array elements is [Nullable](nullable.md).
|
||||
When creating an array on the fly, ClickHouse automatically defines the argument type as the narrowest data type that can store all the listed arguments. If there are any [NULL](../query_language/syntax.md#null-literal) or [Nullable](nullable.md#data_type-nullable) type arguments, the type of array elements is [Nullable](nullable.md).
|
||||
|
||||
If ClickHouse couldn't determine the data type, it will generate an exception. For instance, this will happen when trying to create an array with strings and numbers simultaneously (`SELECT array(1, 'a')`).
|
||||
|
||||
|
@ -8,7 +8,7 @@ Includes the `Enum8` and `Enum16` types. `Enum` saves the finite set of pairs of
|
||||
|
||||
## Usage examples
|
||||
|
||||
Here we create a table with an `Enum8('hello' = 1, 'world' = 2)` type column:
|
||||
Here we create a table with an `Enum8('hello' = 1, 'world' = 2)` type column:
|
||||
|
||||
```
|
||||
CREATE TABLE t_enum
|
||||
|
@ -5,7 +5,7 @@
|
||||
Types are equivalent to types of C:
|
||||
|
||||
- `Float32` - `float`
|
||||
- `Float64` - `double`
|
||||
- `Float64` - `double`
|
||||
|
||||
We recommend that you store data in integer form whenever possible. For example, convert fixed precision numbers to integer values, such as monetary amounts or page load times in milliseconds.
|
||||
|
||||
|
@ -40,7 +40,7 @@ quantilesState(0.5, 0.9)(SendTiming)
|
||||
|
||||
In contrast to the corresponding functions `uniq` and `quantiles`, `-State`- functions return the state, instead the final value. In other words, they return a value of `AggregateFunction` type.
|
||||
|
||||
In the results of `SELECT` query the values of `AggregateFunction` type have implementation-specific binary representation for all of the ClickHouse output formats. If dump data into, for example, `TabSeparated` format with `SELECT` query then this dump can be loaded back using `INSERT` query.
|
||||
In the results of `SELECT` query the values of `AggregateFunction` type have implementation-specific binary representation for all of the ClickHouse output formats. If dump data into, for example, `TabSeparated` format with `SELECT` query then this dump can be loaded back using `INSERT` query.
|
||||
|
||||
### Data Selection
|
||||
|
||||
|
@ -44,7 +44,7 @@ void reinsert(const Value & x)
|
||||
memcpy(&buf[place_value], &x, sizeof(x));
|
||||
```
|
||||
|
||||
**6.** In `if`, `for`, `while` and other expressions, a space is inserted in front of the opening bracket (as opposed to function calls).
|
||||
**6.** In `if`, `for`, `while` and other expressions, a space is inserted in front of the opening bracket (as opposed to function calls).
|
||||
|
||||
```cpp
|
||||
for (size_t i = 0; i < rows; i += storage.index_granularity)
|
||||
@ -93,7 +93,7 @@ struct AggregatedStatElement
|
||||
{}
|
||||
```
|
||||
|
||||
**15.** In classes and structures, write `public`, `private`, and `protected` on the same level as `class/struct`, and indent the rest of the code.
|
||||
**15.** In classes and structures, write `public`, `private`, and `protected` on the same level as `class/struct`, and indent the rest of the code.
|
||||
|
||||
```cpp
|
||||
template <typename T>
|
||||
@ -261,7 +261,7 @@ The example is borrowed from the resource [http://home.tamk.fi/~jaalto/course/co
|
||||
|
||||
**7.** Do not write garbage comments (author, creation date ..) at the beginning of each file.
|
||||
|
||||
**8.** Single-line comments begin with three slashes: `///` and multi-line comments begin with `/**`. These comments are considered "documentation".
|
||||
**8.** Single-line comments begin with three slashes: `///` and multi-line comments begin with `/**`. These comments are considered "documentation".
|
||||
|
||||
Note: You can use Doxygen to generate documentation from these comments. But Doxygen is not generally used because it is more convenient to navigate the code in the IDE.
|
||||
|
||||
@ -299,7 +299,7 @@ Note: You can use Doxygen to generate documentation from these comments. But Dox
|
||||
|
||||
## Names
|
||||
|
||||
**1.** Use lowercase letters with underscores in the names of variables and class members.
|
||||
**1.** Use lowercase letters with underscores in the names of variables and class members.
|
||||
|
||||
```cpp
|
||||
size_t max_block_size;
|
||||
@ -349,7 +349,7 @@ In all other cases, use a name that describes the meaning.
|
||||
bool info_successfully_loaded = false;
|
||||
```
|
||||
|
||||
**9.** Names of `define`s and global constants use ALL_CAPS with underscores.
|
||||
**9.** Names of `define`s and global constants use ALL_CAPS with underscores.
|
||||
|
||||
```cpp
|
||||
#define MAX_SRC_TABLE_NAMES_TO_STORE 1000
|
||||
|
@ -15,7 +15,7 @@ To run all tests, use `dbms/tests/clickhouse-test` tool. Look `--help` for the l
|
||||
|
||||
The most simple way to invoke functional tests is to copy `clickhouse-client` to `/usr/bin/`, run `clickhouse-server` and then run `./clickhouse-test` from its own directory.
|
||||
|
||||
To add new test, create a `.sql` or `.sh` file in `dbms/src/tests/queries/0_stateless` directory, check it manually and then generate `.reference` file in the following way: `clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference` or `./00000_test.sh > ./00000_test.reference`.
|
||||
To add new test, create a `.sql` or `.sh` file in `dbms/src/tests/queries/0_stateless` directory, check it manually and then generate `.reference` file in the following way: `clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference` or `./00000_test.sh > ./00000_test.reference`.
|
||||
|
||||
Tests should use (create, drop, etc) only tables in `test` database that is assumed to be created beforehand; also tests can use temporary tables.
|
||||
|
||||
|
@ -166,7 +166,7 @@ SELECT Origin, count(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND
|
||||
Q4. The number of delays by carrier for 2007
|
||||
|
||||
``` sql
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
```
|
||||
|
||||
Q5. The percentage of delays by carrier for 2007
|
||||
|
@ -10,7 +10,7 @@ make
|
||||
|
||||
There will be some warnings during the process, but this is normal.
|
||||
|
||||
Place `dbgen` and `dists.dss` in any location with 800 GB of free disk space.
|
||||
Place `dbgen` and `dists.dss` in any location with 800 GB of free disk space.
|
||||
|
||||
Generating data:
|
||||
|
||||
@ -73,7 +73,7 @@ CREATE TABLE partd AS part ENGINE = Distributed(perftest_3shards_1replicas, defa
|
||||
```
|
||||
|
||||
For testing on a single server, just use MergeTree tables.
|
||||
For distributed testing, you need to configure the `perftest_3shards_1replicas` cluster in the config file.
|
||||
For distributed testing, you need to configure the `perftest_3shards_1replicas` cluster in the config file.
|
||||
Next, create MergeTree tables on each server and a Distributed above them.
|
||||
|
||||
Downloading data (change 'customer' to 'customerd' in the distributed version):
|
||||
|
@ -79,7 +79,7 @@ You can pass parameters to `clickhouse-client` (all parameters have a default va
|
||||
|
||||
### Command Line Options
|
||||
|
||||
- `--host, -h` -– The server name, 'localhost' by default. You can use either the name or the IPv4 or IPv6 address.
|
||||
- `--host, -h` -– The server name, 'localhost' by default. You can use either the name or the IPv4 or IPv6 address.
|
||||
- `--port` – The port to connect to. Default value: 9000. Note that the HTTP interface and the native interface use different ports.
|
||||
- `--user, -u` – The username. Default value: default.
|
||||
- `--password` – The password. Default value: empty string.
|
||||
@ -95,7 +95,7 @@ You can pass parameters to `clickhouse-client` (all parameters have a default va
|
||||
|
||||
### Configuration Files
|
||||
|
||||
`clickhouse-client` uses the first existing file of the following:
|
||||
`clickhouse-client` uses the first existing file of the following:
|
||||
|
||||
- Defined in the `-config-file` parameter.
|
||||
- `./clickhouse-client.xml`
|
||||
|
@ -74,7 +74,7 @@ During a read operation, incorrect dates and dates with times can be parsed with
|
||||
|
||||
As an exception, parsing dates with times is also supported in Unix timestamp format, if it consists of exactly 10 decimal digits. The result is not time zone-dependent. The formats YYYY-MM-DD hh:mm:ss and NNNNNNNNNN are differentiated automatically.
|
||||
|
||||
Strings are output with backslash-escaped special characters. The following escape sequences are used for output: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\'`, `\\`. Parsing also supports the sequences `\a`, `\v`, and `\xHH` (hex escape sequences) and any `\c` sequences, where `c` is any character (these sequences are converted to `c`). Thus, reading data supports formats where a line feed can be written as `\n` or `\`, or as a line feed. For example, the string `Hello world` with a line feed between the words instead of a space can be parsed in any of the following variations:
|
||||
Strings are output with backslash-escaped special characters. The following escape sequences are used for output: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\'`, `\\`. Parsing also supports the sequences `\a`, `\v`, and `\xHH` (hex escape sequences) and any `\c` sequences, where `c` is any character (these sequences are converted to `c`). Thus, reading data supports formats where a line feed can be written as `\n` or `\`, or as a line feed. For example, the string `Hello world` with a line feed between the words instead of a space can be parsed in any of the following variations:
|
||||
|
||||
```
|
||||
Hello\nworld
|
||||
@ -242,7 +242,7 @@ SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase WITH TOTA
|
||||
}
|
||||
```
|
||||
|
||||
The JSON is compatible with JavaScript. To ensure this, some characters are additionally escaped: the slash `/` is escaped as `\/`; alternative line breaks `U+2028` and `U+2029`, which break some browsers, are escaped as `\uXXXX`. ASCII control characters are escaped: backspace, form feed, line feed, carriage return, and horizontal tab are replaced with `\b`, `\f`, `\n`, `\r`, `\t` , as well as the remaining bytes in the 00-1F range using `\uXXXX` sequences. Invalid UTF-8 sequences are changed to the replacement character <20> so the output text will consist of valid UTF-8 sequences. For compatibility with JavaScript, Int64 and UInt64 integers are enclosed in double quotes by default. To remove the quotes, you can set the configuration parameter output_format_json_quote_64bit_integers to 0.
|
||||
The JSON is compatible with JavaScript. To ensure this, some characters are additionally escaped: the slash `/` is escaped as `\/`; alternative line breaks `U+2028` and `U+2029`, which break some browsers, are escaped as `\uXXXX`. ASCII control characters are escaped: backspace, form feed, line feed, carriage return, and horizontal tab are replaced with `\b`, `\f`, `\n`, `\r`, `\t` , as well as the remaining bytes in the 00-1F range using `\uXXXX` sequences. Invalid UTF-8 sequences are changed to the replacement character <20> so the output text will consist of valid UTF-8 sequences. For compatibility with JavaScript, Int64 and UInt64 integers are enclosed in double quotes by default. To remove the quotes, you can set the configuration parameter output_format_json_quote_64bit_integers to 0.
|
||||
|
||||
`rows` – The total number of output rows.
|
||||
|
||||
@ -255,7 +255,7 @@ If the query contains GROUP BY, rows_before_limit_at_least is the exact number o
|
||||
|
||||
This format is only appropriate for outputting a query result, but not for parsing (retrieving data to insert in a table).
|
||||
|
||||
ClickHouse supports [NULL](../query_language/syntax.md), which is displayed as `null` in the JSON output.
|
||||
ClickHouse supports [NULL](../query_language/syntax.md), which is displayed as `null` in the JSON output.
|
||||
|
||||
See also the JSONEachRow format.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Yandex.Metrica Use Case
|
||||
|
||||
ClickHouse was originally developed to power [Yandex.Metrica](https://metrica.yandex.com/), [the second largest web analytics platform in the world](http://w3techs.com/technologies/overview/traffic_analysis/all), and continues to be the core component of this system. With more than 13 trillion records in the database and more than 20 billion events daily, ClickHouse allows generating custom reports on the fly directly from non-aggregated data. This article briefly covers the goals of ClickHouse in the early stages of its development.
|
||||
ClickHouse was originally developed to power [Yandex.Metrica](https://metrica.yandex.com/), [the second largest web analytics platform in the world](http://w3techs.com/technologies/overview/traffic_analysis/all), and continues to be the core component of this system. With more than 13 trillion records in the database and more than 20 billion events daily, ClickHouse allows generating custom reports on the fly directly from non-aggregated data. This article briefly covers the goals of ClickHouse in the early stages of its development.
|
||||
|
||||
Yandex.Metrica builds customized reports on the fly based on hits and sessions, with arbitrary segments defined by the user. This often requires building complex aggregates, such as the number of unique users. New data for building a report is received in real time.
|
||||
|
||||
|
@ -12,7 +12,7 @@ If `replace` is specified, it replaces the entire element with the specified one
|
||||
|
||||
If `remove` is specified, it deletes the element.
|
||||
|
||||
The config can also define "substitutions". If an element has the `incl` attribute, the corresponding substitution from the file will be used as the value. By default, the path to the file with substitutions is `/etc/metrika.xml`. This can be changed in the [include_from](server_settings/settings.md#server_settings-include_from) element in the server config. The substitution values are specified in `/yandex/substitution_name` elements in this file. If a substitution specified in `incl` does not exist, it is recorded in the log. To prevent ClickHouse from logging missing substitutions, specify the `optional="true"` attribute (for example, settings for [macros](server_settings/settings.md)).
|
||||
The config can also define "substitutions". If an element has the `incl` attribute, the corresponding substitution from the file will be used as the value. By default, the path to the file with substitutions is `/etc/metrika.xml`. This can be changed in the [include_from](server_settings/settings.md#server_settings-include_from) element in the server config. The substitution values are specified in `/yandex/substitution_name` elements in this file. If a substitution specified in `incl` does not exist, it is recorded in the log. To prevent ClickHouse from logging missing substitutions, specify the `optional="true"` attribute (for example, settings for [macros](server_settings/settings.md)).
|
||||
|
||||
Substitutions can also be performed from ZooKeeper. To do this, specify the attribute `from_zk = "/path/to/node"`. The element value is replaced with the contents of the node at `/path/to/node` in ZooKeeper. You can also put an entire XML subtree on the ZooKeeper node and it will be fully inserted into the source element.
|
||||
|
||||
|
@ -42,7 +42,7 @@ Block field `<case>`:
|
||||
- ``min_part_size_ratio`` – The ratio of the minimum size of a table part to the full size of the table.
|
||||
- ``method`` – Compression method. Acceptable values : ``lz4`` or ``zstd``(experimental).
|
||||
|
||||
ClickHouse checks `min_part_size` and `min_part_size_ratio` and processes the `case` blocks that match these conditions. If none of the `<case>` matches, ClickHouse applies the `lz4` compression algorithm.
|
||||
ClickHouse checks `min_part_size` and `min_part_size_ratio` and processes the `case` blocks that match these conditions. If none of the `<case>` matches, ClickHouse applies the `lz4` compression algorithm.
|
||||
|
||||
**Example**
|
||||
|
||||
@ -456,7 +456,7 @@ Keys for server/client settings:
|
||||
- requireTLSv1 – Require a TLSv1.2 connection. Acceptable values: `true`, `false`.
|
||||
- fips – Activates OpenSSL FIPS mode. Supported if the library's OpenSSL version supports FIPS.
|
||||
- privateKeyPassphraseHandler – Class (PrivateKeyPassphraseHandler subclass) that requests the passphrase for accessing the private key. For example: ``<privateKeyPassphraseHandler>``, ``<name>KeyFileHandler</name>``, ``<options><password>test</password></options>``, ``</privateKeyPassphraseHandler>``.
|
||||
- invalidCertificateHandler – Class (subclass of CertificateHandler) for verifying invalid certificates. For example: `` <invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>`` .
|
||||
- invalidCertificateHandler – Class (subclass of CertificateHandler) for verifying invalid certificates. For example: `` <invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>`` .
|
||||
- disableProtocols – Protocols that are not allowed to use.
|
||||
- preferServerCiphers – Preferred server ciphers on the client.
|
||||
|
||||
@ -641,7 +641,7 @@ The uncompressed cache is advantageous for very short queries in individual case
|
||||
|
||||
## user_files_path {#server_settings-user_files_path}
|
||||
|
||||
The directory with user files. Used in the table function [file()](../../query_language/table_functions/file.md).
|
||||
The directory with user files. Used in the table function [file()](../../query_language/table_functions/file.md).
|
||||
|
||||
**Example**
|
||||
|
||||
|
@ -28,7 +28,7 @@ Forces a query to an out-of-date replica if updated data is not available. See "
|
||||
|
||||
ClickHouse selects the most relevant from the outdated replicas of the table.
|
||||
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
|
||||
By default, 1 (enabled).
|
||||
|
||||
@ -38,7 +38,7 @@ Disables query execution if the index can't be used by date.
|
||||
|
||||
Works with tables in the MergeTree family.
|
||||
|
||||
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 actually 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](../../operations/table_engines/mergetree.md)".
|
||||
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 actually 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](../../operations/table_engines/mergetree.md)".
|
||||
|
||||
|
||||
## force_primary_key
|
||||
@ -47,7 +47,7 @@ Disables query execution if indexing by the primary key is not possible.
|
||||
|
||||
Works with tables in the MergeTree family.
|
||||
|
||||
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 actually reduces the amount of data to read. For more information about data ranges in MergeTree tables, see "[MergeTree](../../operations/table_engines/mergetree.md)".
|
||||
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 actually reduces the amount of data to read. For more information about data ranges in MergeTree tables, see "[MergeTree](../../operations/table_engines/mergetree.md)".
|
||||
|
||||
|
||||
## fsync_metadata
|
||||
@ -141,7 +141,7 @@ Sets the time in seconds. If a replica lags more than the set value, this replic
|
||||
|
||||
Default value: 0 (off).
|
||||
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
|
||||
## max_threads {#settings-max_threads}
|
||||
|
||||
@ -267,7 +267,7 @@ This parameter is useful when you are using formats that require a schema defini
|
||||
|
||||
## stream_flush_interval_ms
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
The default value is 7500.
|
||||
|
||||
@ -326,7 +326,7 @@ Replica lag is not controlled.
|
||||
Enable compilation of queries. By default, 0 (disabled).
|
||||
|
||||
Compilation is only used for part of the query-processing pipeline: for the first stage of aggregation (GROUP BY).
|
||||
If this portion of the pipeline was compiled, the query may run faster due to 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.
|
||||
If this portion of the pipeline was compiled, the query may run faster due to 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.
|
||||
|
||||
## min_count_to_compile
|
||||
|
||||
@ -344,7 +344,7 @@ It works for JSONEachRow and TSKV formats.
|
||||
|
||||
## output_format_json_quote_64bit_integers
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
## format_csv_delimiter {#settings-format_csv_delimiter}
|
||||
|
||||
@ -373,7 +373,7 @@ The default value is 0.
|
||||
|
||||
All the replicas in the quorum are consistent, i.e., they contain data from all previous `INSERT` queries. The `INSERT` sequence is linearized.
|
||||
|
||||
When reading the data written from the `insert_quorum`, you can use the[select_sequential_consistency](#select-sequential-consistency) option.
|
||||
When reading the data written from the `insert_quorum`, you can use the [select_sequential_consistency](#select-sequential-consistency) option.
|
||||
|
||||
**ClickHouse generates an exception**
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Settings profiles
|
||||
|
||||
A settings profile is a collection of settings grouped under the same name. Each ClickHouse user has a profile.
|
||||
To apply all the settings in a profile, set the `profile` setting.
|
||||
To apply all the settings in a profile, set the `profile` setting.
|
||||
|
||||
Example:
|
||||
|
||||
@ -58,9 +58,9 @@ Example:
|
||||
</profiles>
|
||||
```
|
||||
|
||||
The example specifies two profiles: `default` and `web`. The `default` profile has a special purpose: it must always be present and is applied when starting the server. In other words, the `default` profile contains default settings. The `web` profile is a regular profile that can be set using the `SET` query or using a URL parameter in an HTTP query.
|
||||
The example specifies two profiles: `default` and `web`. The `default` profile has a special purpose: it must always be present and is applied when starting the server. In other words, the `default` profile contains default settings. The `web` profile is a regular profile that can be set using the `SET` query or using a URL parameter in an HTTP query.
|
||||
|
||||
Settings profiles can inherit from each other. To use inheritance, indicate the `profile` setting before the other settings that are listed in the profile.
|
||||
Settings profiles can inherit from each other. To use inheritance, indicate the `profile` setting before the other settings that are listed in the profile.
|
||||
|
||||
|
||||
[Original article](https://clickhouse.yandex/docs/en/operations/settings/settings_profiles/) <!--hide-->
|
||||
|
@ -141,7 +141,7 @@ Formats:
|
||||
|
||||
- active (UInt8) – Indicates whether the part is active. If a part is active, it is used in a table; otherwise, it will be deleted. Inactive data parts remain after merging.
|
||||
|
||||
- marks (UInt64) – The number of marks. To get the approximate number of rows in a data part, multiply ``marks`` by the index granularity (usually 8192).
|
||||
- marks (UInt64) – The number of marks. To get the approximate number of rows in a data part, multiply ``marks`` by the index granularity (usually 8192).
|
||||
|
||||
- marks_size (UInt64) – The size of the file with marks.
|
||||
|
||||
@ -373,7 +373,7 @@ If the path specified in 'path' doesn't exist, an exception will be thrown.
|
||||
|
||||
Columns:
|
||||
|
||||
- `name String` — The name of the node.
|
||||
- `name String` — The name of the node.
|
||||
- `path String` — The path to the node.
|
||||
- `value String` — Node value.
|
||||
- `dataLength Int32` — Size of the value.
|
||||
|
@ -36,7 +36,7 @@ In the `system.parts` table, the `partition` column specifies the value of the p
|
||||
|
||||
Old: `20140317_20140323_2_2_0` (minimum date - maximum date - minimum block number - maximum block number - level).
|
||||
|
||||
Now: `201403_2_2_0` (partition ID - minimum block number - maximum block number - level).
|
||||
Now: `201403_2_2_0` (partition ID - minimum block number - maximum block number - level).
|
||||
|
||||
The partition ID is its string identifier (human-readable, if possible) that is used for the names of data parts in the file system and in ZooKeeper. You can specify it in ALTER queries in place of the partition key. Example: Partition key `toYYYYMM(EventDate)`; ALTER can specify either `PARTITION 201710` or `PARTITION ID '201710'`.
|
||||
|
||||
|
@ -39,7 +39,7 @@ Required parameters:
|
||||
Optional parameters:
|
||||
|
||||
- `kafka_row_delimiter` - Character-delimiter of records (rows), which ends the message.
|
||||
- `kafka_schema` – An optional parameter that must be used if the format requires a schema definition. For example, [Cap'n Proto](https://capnproto.org/) requires the path to the schema file and the name of the root `schema.capnp:Message` object.
|
||||
- `kafka_schema` – An optional parameter that must be used if the format requires a schema definition. For example, [Cap'n Proto](https://capnproto.org/) requires the path to the schema file and the name of the root `schema.capnp:Message` object.
|
||||
- `kafka_num_consumers` – The number of consumers per table. Default: `1`. Specify more consumers if the throughput of one consumer is insufficient. The total number of consumers should not exceed the number of partitions in the topic, since only one consumer can be assigned per partition.
|
||||
|
||||
Examples:
|
||||
@ -122,7 +122,7 @@ If you want to change the target table by using `ALTER`, we recommend disabling
|
||||
Similar to GraphiteMergeTree, the Kafka engine supports extended configuration using the ClickHouse config file. There are two configuration keys that you can use: global (`kafka`) and topic-level (`kafka_*`). The global configuration is applied first, and then the topic-level configuration is applied (if it exists).
|
||||
|
||||
```xml
|
||||
<!-- Global configuration options for all tables of Kafka engine type -->
|
||||
<!-- Global configuration options for all tables of Kafka engine type -->
|
||||
<kafka>
|
||||
<debug>cgrp</debug>
|
||||
<auto_offset_reset>smallest</auto_offset_reset>
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Merge
|
||||
|
||||
The `Merge` engine (not to be confused with `MergeTree`) does not store data itself, but allows reading from any number of other tables simultaneously.
|
||||
The `Merge` engine (not to be confused with `MergeTree`) does not store data itself, but allows reading from any number of other tables simultaneously.
|
||||
Reading is automatically parallelized. Writing to a table is not supported. When reading, the indexes of tables that are actually being read are used, if they exist.
|
||||
The `Merge` engine accepts parameters: the database name and a regular expression for tables.
|
||||
The `Merge` engine accepts parameters: the database name and a regular expression for tables.
|
||||
|
||||
Example:
|
||||
|
||||
@ -10,17 +10,17 @@ Example:
|
||||
Merge(hits, '^WatchLog')
|
||||
```
|
||||
|
||||
Data will be read from the tables in the `hits` database that have names that match the regular expression '`^WatchLog`'.
|
||||
Data will be read from the tables in the `hits` database that have names that match the regular expression '`^WatchLog`'.
|
||||
|
||||
Instead of the database name, you can use a constant expression that returns a string. For example, `currentDatabase()`.
|
||||
|
||||
Regular expressions — [re2](https://github.com/google/re2) (supports a subset of PCRE), case-sensitive.
|
||||
See the notes about escaping symbols in regular expressions in the "match" section.
|
||||
|
||||
When selecting tables to read, the `Merge` table itself will not be selected, even if it matches the regex. This is to avoid loops.
|
||||
It is possible to create two `Merge` tables that will endlessly try to read each others' data, but this is not a good idea.
|
||||
When selecting tables to read, the `Merge` table itself will not be selected, even if it matches the regex. This is to avoid loops.
|
||||
It is possible to create two `Merge` tables that will endlessly try to read each others' data, but this is not a good idea.
|
||||
|
||||
The typical way to use the `Merge` engine is for working with a large number of `TinyLog` tables as if with a single table.
|
||||
The typical way to use the `Merge` engine is for working with a large number of `TinyLog` tables as if with a single table.
|
||||
|
||||
Example 2:
|
||||
|
||||
@ -63,7 +63,7 @@ Virtual columns differ from normal columns in the following ways:
|
||||
|
||||
The `Merge` type table contains a virtual `_table` column of the `String` type. (If the table already has a `_table` column, the virtual column is called `_table1`; if you already have `_table1`, it's called `_table2`, and so on.) It contains the name of the table that data was read from.
|
||||
|
||||
If the `WHERE/PREWHERE` clause contains conditions for the `_table` column that do not depend on other table columns (as one of the conjunction elements, or as an entire expression), these conditions are used as an index. The conditions are performed on a data set of table names to read data from, and the read operation will be performed from only those tables that the condition was triggered on.
|
||||
If the `WHERE/PREWHERE` clause contains conditions for the `_table` column that do not depend on other table columns (as one of the conjunction elements, or as an entire expression), these conditions are used as an index. The conditions are performed on a data set of table names to read data from, and the read operation will be performed from only those tables that the condition was triggered on.
|
||||
|
||||
|
||||
[Original article](https://clickhouse.yandex/docs/en/operations/table_engines/merge/) <!--hide-->
|
||||
|
@ -61,7 +61,7 @@ For a description of request parameters, see [request description](../../query_l
|
||||
By default the primary key is the same as the sorting key (which is specified by the `ORDER BY` clause).
|
||||
Thus in most cases it is unnecessary to specify a separate `PRIMARY KEY` clause.
|
||||
|
||||
- `SAMPLE BY` — An expression for sampling.
|
||||
- `SAMPLE BY` — An expression for sampling.
|
||||
|
||||
If a sampling expression is used, the primary key must contain it. Example:
|
||||
`SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`.
|
||||
|
@ -4,7 +4,7 @@ The engine differs from [MergeTree](mergetree.md#table_engines-mergetree) in tha
|
||||
|
||||
Data deduplication occurs only during a merge. Merging occurs in the background at an unknown time, so you can't plan for it. Some of the data may remain unprocessed. Although you can run an unscheduled merge using the `OPTIMIZE` query, don't count on using it, because the `OPTIMIZE` query will read and write a large amount of data.
|
||||
|
||||
Thus, `ReplacingMergeTree` is suitable for clearing out duplicate data in the background in order to save space, but it doesn't guarantee the absence of duplicates.
|
||||
Thus, `ReplacingMergeTree` is suitable for clearing out duplicate data in the background in order to save space, but it doesn't guarantee the absence of duplicates.
|
||||
|
||||
## Creating a Table
|
||||
|
||||
@ -33,7 +33,7 @@ For a description of request parameters, see [request description](../../query_l
|
||||
|
||||
**Query clauses**
|
||||
|
||||
When creating a `ReplacingMergeTree` table the same [clauses](mergetree.md) are required, as when creating a `MergeTree` table.
|
||||
When creating a `ReplacingMergeTree` table the same [clauses](mergetree.md) are required, as when creating a `MergeTree` table.
|
||||
|
||||
<details markdown="1"><summary>Deprecated Method for Creating a Table</summary>
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
|
||||
# SummingMergeTree
|
||||
|
||||
The engine inherits from [MergeTree](mergetree.md#table_engines-mergetree). The difference is that when merging data parts for `SummingMergeTree` tables ClickHouse replaces all the rows with the same primary key (or more accurately, with the same [sorting key](mergetree.md)) with one row which contains summarized values for the columns with the numeric data type. If the sorting key is composed in a way that a single key value corresponds to large number of rows, this significantly reduces storage volume and speeds up data selection.
|
||||
The engine inherits from [MergeTree](mergetree.md#table_engines-mergetree). The difference is that when merging data parts for `SummingMergeTree` tables ClickHouse replaces all the rows with the same primary key (or more accurately, with the same [sorting key](mergetree.md)) with one row which contains summarized values for the columns with the numeric data type. If the sorting key is composed in a way that a single key value corresponds to large number of rows, this significantly reduces storage volume and speeds up data selection.
|
||||
|
||||
We recommend to use the engine together with `MergeTree`. Store complete data in `MergeTree` table, and use `SummingMergeTree` for aggregated data storing, for example, when preparing reports. Such an approach will prevent you from losing valuable data due to an incorrectly composed primary key.
|
||||
We recommend to use the engine together with `MergeTree`. Store complete data in `MergeTree` table, and use `SummingMergeTree` for aggregated data storing, for example, when preparing reports. Such an approach will prevent you from losing valuable data due to an incorrectly composed primary key.
|
||||
|
||||
## Creating a Table
|
||||
|
||||
@ -31,7 +31,7 @@ The columns must be of a numeric type and must not be in the primary key.
|
||||
|
||||
**Query clauses**
|
||||
|
||||
When creating a `SummingMergeTree` table the same [clauses](mergetree.md) are required, as when creating a `MergeTree` table.
|
||||
When creating a `SummingMergeTree` table the same [clauses](mergetree.md) are required, as when creating a `MergeTree` table.
|
||||
|
||||
<details markdown="1"><summary>Deprecated Method for Creating a Table</summary>
|
||||
|
||||
@ -72,7 +72,7 @@ Insert data to it:
|
||||
:) INSERT INTO summtt Values(1,1),(1,2),(2,1)
|
||||
```
|
||||
|
||||
ClickHouse may sum all the rows not completely ([see below](#data-processing)), so we use an aggregate function `sum` and `GROUP BY` clause in the query.
|
||||
ClickHouse may sum all the rows not completely ([see below](#data-processing)), so we use an aggregate function `sum` and `GROUP BY` clause in the query.
|
||||
|
||||
```sql
|
||||
SELECT key, sum(value) FROM summtt GROUP BY key
|
||||
|
@ -18,7 +18,7 @@ You can use `turbostat` to view the CPU's actual clock rate under a load.
|
||||
|
||||
## CPU Scaling Governor
|
||||
|
||||
Always use the `performance` scaling governor. The `on-demand` scaling governor works much worse with constantly high demand.
|
||||
Always use the `performance` scaling governor. The `on-demand` scaling governor works much worse with constantly high demand.
|
||||
|
||||
```bash
|
||||
sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
|
@ -37,7 +37,7 @@ Pattern syntax:
|
||||
|
||||
Any quantity of any type of events is allowed over the specified time.
|
||||
|
||||
Instead of `>=`, the following operators can be used:`<`, `>`, `<=`.
|
||||
Instead of `>=`, the following operators can be used:`<`, `>`, `<=`.
|
||||
|
||||
Any number may be specified in place of 1800.
|
||||
|
||||
|
@ -295,7 +295,7 @@ Uses the [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) algorithm to a
|
||||
|
||||
The result is determinate (it doesn't depend on the order of query processing).
|
||||
|
||||
We don't recommend using this function. In most cases, use the `uniq` or `uniqCombined` function.
|
||||
We don't recommend using this function. In most cases, use the `uniq` or `uniqCombined` function.
|
||||
|
||||
## uniqExact(x)
|
||||
|
||||
@ -382,8 +382,8 @@ For its purpose (calculating quantiles of page loading times), using this functi
|
||||
|
||||
## quantileTimingWeighted(level)(x, weight)
|
||||
|
||||
Differs from the `quantileTiming` function in that it has a second argument, "weights". Weight is a non-negative integer.
|
||||
The result is calculated as if the `x` value were passed `weight` number of times to the `quantileTiming` function.
|
||||
Differs from the `quantileTiming` function in that it has a second argument, "weights". Weight is a non-negative integer.
|
||||
The result is calculated as if the `x` value were passed `weight` number of times to the `quantileTiming` function.
|
||||
|
||||
## quantileExact(level)(x)
|
||||
|
||||
@ -437,7 +437,7 @@ The result is equal to the square root of `varPop(x)`.
|
||||
|
||||
Returns an array of the most frequent values in the specified column. The resulting array is sorted in descending order of frequency of values (not by the values themselves).
|
||||
|
||||
Implements the [ Filtered Space-Saving](http://www.l2f.inesc-id.pt/~fmmb/wiki/uploads/Work/misnis.ref0a.pdf) algorithm for analyzing TopK, based on the reduce-and-combine algorithm from [Parallel Space Saving](https://arxiv.org/pdf/1401.0702.pdf).
|
||||
Implements the [ Filtered Space-Saving](http://www.l2f.inesc-id.pt/~fmmb/wiki/uploads/Work/misnis.ref0a.pdf) algorithm for analyzing TopK, based on the reduce-and-combine algorithm from [Parallel Space Saving](https://arxiv.org/pdf/1401.0702.pdf).
|
||||
|
||||
```
|
||||
topK(N)(column)
|
||||
|
@ -54,7 +54,7 @@ If there is a failure during one of the successive stages, data can be restored
|
||||
|
||||
The `ALTER` query lets you create and delete separate elements (columns) in nested data structures, but not whole nested data structures. To add a nested data structure, you can add columns with a name like `name.nested_name` and the type `Array(T)`. A nested data structure is equivalent to multiple array columns with a name that has the same prefix before the dot.
|
||||
|
||||
There is no support for deleting columns in the primary key or the sampling key (columns that are in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, it is allowed to add values to an Enum or change a type with `DateTime` to `UInt32`).
|
||||
There is no support for deleting columns in the primary key or the sampling key (columns that are in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, it is allowed to add values to an Enum or change a type with `DateTime` to `UInt32`).
|
||||
|
||||
If the `ALTER` query is not sufficient for making the table changes you need, you can create a new table, copy the data to it using the `INSERT SELECT` query, then switch the tables using the `RENAME` query and delete the old table.
|
||||
|
||||
@ -115,10 +115,10 @@ Data directory: `/var/lib/clickhouse/data/database/table/`,where `/var/lib/click
|
||||
```bash
|
||||
$ ls -l /var/lib/clickhouse/data/test/visits/
|
||||
total 48
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
|
||||
-rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
|
||||
-rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
|
||||
```
|
||||
|
||||
Here, `20140317_20140323_2_2_0` and ` 20140317_20140323_4_4_0` are the directories of data parts.
|
||||
@ -193,7 +193,7 @@ The `ALTER ... FREEZE PARTITION` query is not replicated. A local backup is only
|
||||
As an alternative, you can manually copy data from the `/var/lib/clickhouse/data/database/table` directory.
|
||||
But if you do this while the server is running, race conditions are possible when copying directories with files being added or changed, and the backup may be inconsistent. You can do this if the server isn't running – then the resulting data will be the same as after the `ALTER TABLE t FREEZE PARTITION` query.
|
||||
|
||||
`ALTER TABLE ... FREEZE PARTITION` only copies data, not table metadata. To make a backup of table metadata, copy the file `/var/lib/clickhouse/metadata/database/table.sql`
|
||||
`ALTER TABLE ... FREEZE PARTITION` only copies data, not table metadata. To make a backup of table metadata, copy the file `/var/lib/clickhouse/metadata/database/table.sql`
|
||||
|
||||
To restore from a backup:
|
||||
|
||||
@ -216,7 +216,7 @@ Although the query is called `ALTER TABLE`, it does not change the table structu
|
||||
|
||||
Data is placed in the `detached` directory. You can use the `ALTER TABLE ... ATTACH` query to attach the data.
|
||||
|
||||
The ` FROM` clause specifies the path in ` ZooKeeper`. For example, `/clickhouse/tables/01-01/visits`.
|
||||
The ` FROM` clause specifies the path in ` ZooKeeper`. For example, `/clickhouse/tables/01-01/visits`.
|
||||
Before downloading, the system checks that the partition exists and the table structure matches. The most appropriate replica is selected automatically from the healthy replicas.
|
||||
|
||||
The `ALTER ... FETCH PARTITION` query is not replicated. The partition will be downloaded to the 'detached' directory only on the local server. Note that if after this you use the `ALTER TABLE ... ATTACH` query to add data to the table, the data will be added on all replicas (on one of the replicas it will be added from the 'detached' directory, and on the rest it will be loaded from neighboring replicas).
|
||||
|
@ -95,7 +95,7 @@ Configuration example:
|
||||
|
||||
The dictionary is stored in memory in the form of a hash table with an ordered array of ranges and their corresponding values.
|
||||
|
||||
This storage method works the same way as hashed and allows using date/time ranges in addition to the key, if they appear in the dictionary.
|
||||
This storage method works the same way as hashed and allows using date/time ranges in addition to the key, if they appear in the dictionary.
|
||||
|
||||
Example: The table contains discounts for each advertiser in the format:
|
||||
|
||||
|
@ -15,7 +15,7 @@ Example of settings:
|
||||
</dictionary>
|
||||
```
|
||||
|
||||
Setting ` <lifetime> 0</lifetime> ` prevents updating dictionaries.
|
||||
Setting ` <lifetime> 0</lifetime> ` prevents updating dictionaries.
|
||||
|
||||
You can set a time interval for upgrades, and ClickHouse will choose a uniformly random time within this range. This is necessary in order to distribute the load on the dictionary source when upgrading on a large number of servers.
|
||||
|
||||
|
@ -243,7 +243,7 @@ This function can also be used in higher-order functions. For example, you can u
|
||||
## arrayEnumerateUniq(arr, ...)
|
||||
|
||||
Returns an array the same size as the source array, indicating for each element what its position is among elements with the same value.
|
||||
For example: arrayEnumerateUniq(\[10, 20, 10, 30\]) = \[1, 1, 2, 1\].
|
||||
For example: arrayEnumerateUniq(\[10, 20, 10, 30\]) = \[1, 1, 2, 1\].
|
||||
|
||||
This function is useful when using ARRAY JOIN and aggregation of array elements.
|
||||
Example:
|
||||
@ -378,7 +378,7 @@ arrayPushFront(array, single_value)
|
||||
**Parameters**
|
||||
|
||||
- `array` – Array.
|
||||
- `single_value` – A single value. Only numbers can be added to an array with numbers, and only strings can be added to an array of strings. When adding numbers, ClickHouse automatically sets the `single_value` type for the data type of the array. For more information about the types of data in ClickHouse, see "[Data types](../../data_types/index.md#data_types)". Can be `NULL`. The function adds a `NULL` element to an array, and the type of array elements converts to `Nullable`.
|
||||
- `single_value` – A single value. Only numbers can be added to an array with numbers, and only strings can be added to an array of strings. When adding numbers, ClickHouse automatically sets the `single_value` type for the data type of the array. For more information about the types of data in ClickHouse, see "[Data types](../../data_types/index.md#data_types)". Can be `NULL`. The function adds a `NULL` element to an array, and the type of array elements converts to `Nullable`.
|
||||
|
||||
**Example**
|
||||
|
||||
|
@ -16,7 +16,7 @@ For information on connecting and configuring external dictionaries, see "[Exter
|
||||
|
||||
`dictGetT('dict_name', 'attr_name', id)`
|
||||
|
||||
- Get the value of the attr_name attribute from the dict_name dictionary using the 'id' key.`dict_name` and `attr_name` are constant strings.`id`must be UInt64.
|
||||
- Get the value of the attr_name attribute from the dict_name dictionary using the 'id' key.`dict_name` and `attr_name` are constant strings.`id`must be UInt64.
|
||||
If there is no `id` key in the dictionary, it returns the default value specified in the dictionary description.
|
||||
|
||||
## dictGetTOrDefault
|
||||
|
@ -102,7 +102,7 @@ coalesce(x,...)
|
||||
|
||||
**Returned values**
|
||||
|
||||
- The first non-`NULL` argument.
|
||||
- The first non-`NULL` argument.
|
||||
- `NULL`, if all arguments are `NULL`.
|
||||
|
||||
**Example**
|
||||
@ -207,7 +207,7 @@ SELECT nullIf(1, 2)
|
||||
|
||||
## assumeNotNull
|
||||
|
||||
Results in a value of type [Nullable](../../data_types/nullable.md)i for a non- `Nullable`, if the value is not `NULL`.
|
||||
Results in a value of type [Nullable](../../data_types/nullable.md) for a non- `Nullable`, if the value is not `NULL`.
|
||||
|
||||
```
|
||||
assumeNotNull(x)
|
||||
|
@ -77,7 +77,7 @@ pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
|
||||
|
||||
**Input values**
|
||||
|
||||
- `(x, y)` — Coordinates of a point on the plane. Data type — [Tuple](../../data_types/tuple.md) — A tuple of two numbers.
|
||||
- `(x, y)` — Coordinates of a point on the plane. Data type — [Tuple](../../data_types/tuple.md) — A tuple of two numbers.
|
||||
- `[(a, b), (c, d) ...]` — Polygon vertices. Data type — [Array](../../data_types/array.md). Each vertex is represented by a pair of coordinates `(a, b)`. Vertices should be specified in a clockwise or counterclockwise order. The minimum number of vertices is 3. The polygon must be constant.
|
||||
- The function also supports polygons with holes (cut out sections). In this case, add polygons that define the cut out sections using additional arguments of the function. The function does not support non-simply-connected polygons.
|
||||
|
||||
|
@ -336,7 +336,7 @@ toColumnTypeName(value)
|
||||
|
||||
**Returned values**
|
||||
|
||||
- A string with the name of the class that is used for representing the `value` data type in RAM.
|
||||
- A string with the name of the class that is used for representing the `value` data type in RAM.
|
||||
|
||||
**Example of the difference between` toTypeName ' and ' toColumnTypeName`**
|
||||
|
||||
@ -376,7 +376,7 @@ dumpColumnStructure(value)
|
||||
|
||||
**Returned values**
|
||||
|
||||
- A string describing the structure that is used for representing the `value` data type in RAM.
|
||||
- A string describing the structure that is used for representing the `value` data type in RAM.
|
||||
|
||||
**Example**
|
||||
|
||||
|
@ -18,7 +18,7 @@ For a case-insensitive search, use the function `positionCaseInsensitiveUTF8`.
|
||||
|
||||
## match(haystack, pattern)
|
||||
|
||||
Checks whether the string matches the `pattern` regular expression. A `re2` regular expression. The [syntax](https://github.com/google/re2/wiki/Syntax) of the `re2` regular expressions is more limited than the syntax of the Perl regular expressions.
|
||||
Checks whether the string matches the `pattern` regular expression. A `re2` regular expression. The [syntax](https://github.com/google/re2/wiki/Syntax) of the `re2` regular expressions is more limited than the syntax of the Perl regular expressions.
|
||||
|
||||
Returns 0 if it doesn't match, or 1 if it matches.
|
||||
|
||||
|
@ -34,7 +34,7 @@ For example, `cutToFirstSignificantSubdomain('https://news.yandex.com.tr/') = 'y
|
||||
|
||||
### path
|
||||
|
||||
Returns the path. Example: `/top/news.html` The path does not include the query string.
|
||||
Returns the path. Example: `/top/news.html` The path does not include the query string.
|
||||
|
||||
### pathFull
|
||||
|
||||
@ -42,7 +42,7 @@ The same as above, but including query string and fragment. Example: /top/news.h
|
||||
|
||||
### queryString
|
||||
|
||||
Returns the query string. Example: page=1&lr=213. query-string does not include the initial question mark, as well as \# and everything after \#.
|
||||
Returns the query string. Example: page=1&lr=213. query-string does not include the initial question mark, as well as \# and everything after \#.
|
||||
|
||||
### fragment
|
||||
|
||||
|
@ -49,7 +49,7 @@ INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
|
||||
|
||||
Columns are mapped according to their position in the SELECT clause. However, their names in the SELECT expression and the table for INSERT may differ. If necessary, type casting is performed.
|
||||
|
||||
None of the data formats except Values allow setting values to expressions such as `now()`, `1 + 2`, and so on. The Values format allows limited use of expressions, but this is not recommended, because in this case inefficient code is used for their execution.
|
||||
None of the data formats except Values allow setting values to expressions such as `now()`, `1 + 2`, and so on. The Values format allows limited use of expressions, but this is not recommended, because in this case inefficient code is used for their execution.
|
||||
|
||||
Other queries for modifying data parts are not supported: `UPDATE`, `DELETE`, `REPLACE`, `MERGE`, `UPSERT`, `INSERT UPDATE`.
|
||||
However, you can delete old data using `ALTER TABLE ... DROP PARTITION`.
|
||||
|
@ -76,7 +76,7 @@ There is no `DETACH DATABASE` query.
|
||||
|
||||
## DROP
|
||||
|
||||
This query has two types: `DROP DATABASE` and `DROP TABLE`.
|
||||
This query has two types: `DROP DATABASE` and `DROP TABLE`.
|
||||
|
||||
``` sql
|
||||
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
|
||||
|
@ -5,7 +5,7 @@ Groups of operators are listed in order of priority (the higher it is in the lis
|
||||
|
||||
## Access Operators
|
||||
|
||||
`a[N]` Access to an element of an array; ` arrayElement(a, N) function`.
|
||||
`a[N]` Access to an element of an array; ` arrayElement(a, N) function`.
|
||||
|
||||
`a.N` – Access to a tuble element; `tupleElement(a, N)` function.
|
||||
|
||||
@ -120,7 +120,7 @@ The following operators do not have a priority, since they are brackets:
|
||||
## Associativity
|
||||
|
||||
All binary operators have left associativity. For example, `1 + 2 + 3` is transformed to `plus(plus(1, 2), 3)`.
|
||||
Sometimes this doesn't work the way you expect. For example, ` SELECT 4 > 2 > 3` will result in 0.
|
||||
Sometimes this doesn't work the way you expect. For example, ` SELECT 4 > 2 > 3` will result in 0.
|
||||
|
||||
For efficiency, the `and` and `or` functions accept any number of arguments. The corresponding chains of `AND` and `OR` operators are transformed to a single call of these functions.
|
||||
|
||||
|
@ -575,11 +575,11 @@ When using `max_bytes_before_external_group_by`, we recommend that you set max_m
|
||||
|
||||
For example, if `max_memory_usage` was set to 10000000000 and you want to use external aggregation, it makes sense to set `max_bytes_before_external_group_by` to 10000000000, and max_memory_usage to 20000000000. When external aggregation is triggered (if there was at least one dump of temporary data), maximum consumption of RAM is only slightly more than ` max_bytes_before_external_group_by`.
|
||||
|
||||
With distributed query processing, external aggregation is performed on remote servers. In order for the requestor server to use only a small amount of RAM, set ` distributed_aggregation_memory_efficient` to 1.
|
||||
With distributed query processing, external aggregation is performed on remote servers. In order for the requestor server to use only a small amount of RAM, set ` distributed_aggregation_memory_efficient` to 1.
|
||||
|
||||
When merging data flushed to the disk, as well as when merging results from remote servers when the ` distributed_aggregation_memory_efficient` setting is enabled, consumes up to 1/256 \* the number of threads from the total amount of RAM.
|
||||
|
||||
When external aggregation is enabled, if there was less than ` max_bytes_before_external_group_by` of data (i.e. data was not flushed), the query runs just as fast as without external aggregation. If any temporary data was flushed, the run time will be several times longer (approximately three times).
|
||||
When external aggregation is enabled, if there was less than ` max_bytes_before_external_group_by` of data (i.e. data was not flushed), the query runs just as fast as without external aggregation. If any temporary data was flushed, the run time will be several times longer (approximately three times).
|
||||
|
||||
If you have an ORDER BY with a small LIMIT after GROUP BY, then the ORDER BY CLAUSE will not use significant amounts of RAM.
|
||||
But if the ORDER BY doesn't have LIMIT, don't forget to enable external sorting (`max_bytes_before_external_sort`).
|
||||
@ -693,7 +693,7 @@ The result will be the same as if GROUP BY were specified across all the fields
|
||||
|
||||
DISTINCT is not supported if SELECT has at least one array column.
|
||||
|
||||
`DISTINCT` works with [NULL](syntax.md) as if `NULL` were a specific value, and `NULL=NULL`. In other words, in the `DISTINCT` results, different combinations with `NULL` only occur once.
|
||||
`DISTINCT` works with [NULL](syntax.md) as if `NULL` were a specific value, and `NULL=NULL`. In other words, in the `DISTINCT` results, different combinations with `NULL` only occur once.
|
||||
|
||||
### LIMIT Clause
|
||||
|
||||
@ -813,7 +813,7 @@ A subquery in the IN clause is always run just one time on a single server. Ther
|
||||
|
||||
#### NULL processing
|
||||
|
||||
During request processing, the IN operator assumes that the result of an operation with [NULL](syntax.md) is always equal to `0`, regardless of whether `NULL` is on the right or left side of the operator. `NULL` values are not included in any dataset, do not correspond to each other and cannot be compared.
|
||||
During request processing, the IN operator assumes that the result of an operation with [NULL](syntax.md) is always equal to `0`, regardless of whether `NULL` is on the right or left side of the operator. `NULL` values are not included in any dataset, do not correspond to each other and cannot be compared.
|
||||
|
||||
Here is an example with the `t_null` table:
|
||||
|
||||
@ -847,18 +847,18 @@ FROM t_null
|
||||
|
||||
#### Distributed Subqueries {#select-distributed-subqueries}
|
||||
|
||||
There are two options for IN-s with subqueries (similar to JOINs): normal `IN` / `JOIN` and `GLOBAL IN` / `GLOBAL JOIN`. They differ in how they are run for distributed query processing.
|
||||
There are two options for IN-s with subqueries (similar to JOINs): normal `IN` / `JOIN` and `GLOBAL IN` / `GLOBAL JOIN`. They differ in how they are run for distributed query processing.
|
||||
|
||||
!!! attention
|
||||
Remember that the algorithms described below may work differently depending on the [settings](../operations/settings/settings.md) `distributed_product_mode` setting.
|
||||
|
||||
When using the regular IN, the query is sent to remote servers, and each of them runs the subqueries in the `IN` or `JOIN` clause.
|
||||
|
||||
When using `GLOBAL IN` / `GLOBAL JOINs`, first all the subqueries are run for `GLOBAL IN` / `GLOBAL JOINs`, and the results are collected in temporary tables. Then the temporary tables are sent to each remote server, where the queries are run using this temporary data.
|
||||
When using `GLOBAL IN` / `GLOBAL JOINs`, first all the subqueries are run for `GLOBAL IN` / `GLOBAL JOINs`, and the results are collected in temporary tables. Then the temporary tables are sent to each remote server, where the queries are run using this temporary data.
|
||||
|
||||
For a non-distributed query, use the regular `IN` / `JOIN`.
|
||||
|
||||
Be careful when using subqueries in the `IN` / `JOIN` clauses for distributed query processing.
|
||||
Be careful when using subqueries in the `IN` / `JOIN` clauses for distributed query processing.
|
||||
|
||||
Let's look at some examples. Assume that each server in the cluster has a normal **local_table**. Each server also has a **distributed_table** table with the **Distributed** type, which looks at all the servers in the cluster.
|
||||
|
||||
|
@ -24,7 +24,7 @@ There may be any number of space symbols between syntactical constructions (incl
|
||||
|
||||
SQL-style and C-style comments are supported.
|
||||
SQL-style comments: from `--` to the end of the line. The space after `--` can be omitted.
|
||||
Comments in C-style: from `/*` to `*/`. These comments can be multiline. Spaces are not required here, either.
|
||||
Comments in C-style: from `/*` to `*/`. These comments can be multiline. Spaces are not required here, either.
|
||||
|
||||
## Keywords
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
`url(URL, format, structure)` - returns a table created from the `URL` with given
|
||||
`format` and `structure`.
|
||||
|
||||
URL - HTTP or HTTPS server address, which can accept `GET` and/or `POST` requests.
|
||||
URL - HTTP or HTTPS server address, which can accept `GET` and/or `POST` requests.
|
||||
|
||||
format - [format](../../interfaces/formats.md#formats) of the data.
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
Type های float در ClickHouse مشابه C می باشد:
|
||||
|
||||
- `Float32` - `float`
|
||||
- `Float64` - `double`
|
||||
- `Float64` - `double`
|
||||
|
||||
توصیه می کنیم که داده ها را هرزمان که امکان پذیره است به جای float به صورت int ذخیره کنید. برای مثال: تبدیل دقت اعداد به یک مقدار int، مثل سرعت page load در قالب میلی ثانیه.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# AggregateFunction(name, types_of_arguments...)
|
||||
|
||||
حالت متوسط از توابع aggregate. برای دریافت آن، از توابع aggregate به همراه پسوند '-State' استفاده کنید. برای اطلاعات بیشتر قسمت "AggregatingMergeTree" را ببینید.
|
||||
حالت متوسط از توابع aggregate. برای دریافت آن، از توابع aggregate به همراه پسوند '-State' استفاده کنید. برای اطلاعات بیشتر قسمت "AggregatingMergeTree" را ببینید.
|
||||
|
||||
</div>
|
||||
[مقاله اصلی](https://clickhouse.yandex/docs/fa/data_types/nested_data_structures/aggregatefunction/) <!--hide-->
|
||||
|
@ -69,7 +69,7 @@ LIMIT 10
|
||||
|
||||
<div dir="rtl" markdown="1">
|
||||
|
||||
ساده ترین راه برای فکر کردن به یک ساختار داده nestet این است که، یک nestet مجموعه ای از آرایه های چند ستونی با طول ثابت است.
|
||||
ساده ترین راه برای فکر کردن به یک ساختار داده nestet این است که، یک nestet مجموعه ای از آرایه های چند ستونی با طول ثابت است.
|
||||
|
||||
تنها جایی که یک دستور SELECT می تواند کل ساختار داده ی nested را به جای مشخص کردن ستون های آن قرار دهد، عبارت ARRAY JOIN است. برای اطلاعات بیشتر "ARRAY JOIN clouse" را ببینید. مثال:
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div dir="rtl" markdown="1">
|
||||
|
||||
# بنچمارک AMPLab Big Data
|
||||
# بنچمارک AMPLab Big Data
|
||||
|
||||
ببینید <https://amplab.cs.berkeley.edu/benchmark/>
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -197,7 +197,7 @@ Q4. تعداد تاخیرها براساس carrier در سال 78
|
||||
</div>
|
||||
|
||||
``` sql
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
```
|
||||
|
||||
<div dir="rtl" markdown="1">
|
||||
|
@ -14,7 +14,7 @@ make
|
||||
|
||||
<div dir="rtl" markdown="1">
|
||||
|
||||
در هنگام پردازش چند warnings نمایش داده می شود که مشکلی نیست و طبیعی است.
|
||||
در هنگام پردازش چند warnings نمایش داده می شود که مشکلی نیست و طبیعی است.
|
||||
|
||||
`dbgen` و ` dists.dss` را در یک جا با 800 گیگابایت فضای حالی دیسک قرار دهید.
|
||||
|
||||
|
@ -46,7 +46,7 @@ sudo apt-get install clickhouse-client clickhouse-server
|
||||
|
||||
شما همچنین می توانید از طریق لینک زیر پکیج ClickHouse را به صورت دستی دانلود و نصب کنید: <https://repo.yandex.ru/clickhouse/deb/stable/main/>.
|
||||
|
||||
ClickHouse دارای تنظیمات محدودیت دسترسی می باشد. این تنظیمات در فایل 'users.xml' (کنار 'config.xml') می باشد. به صورت پیش فرض دسترسی برای کاربر 'default' از همه جا بدون نیاز به پسورد وجود دارد. 'user/default/networks' را مشاهده کنید. برای اطلاعات بیشتر قسمت "تنظیمات فایل ها" را مشاهده کنید.
|
||||
ClickHouse دارای تنظیمات محدودیت دسترسی می باشد. این تنظیمات در فایل 'users.xml' (کنار 'config.xml') می باشد. به صورت پیش فرض دسترسی برای کاربر 'default' از همه جا بدون نیاز به پسورد وجود دارد. 'user/default/networks' را مشاهده کنید. برای اطلاعات بیشتر قسمت "تنظیمات فایل ها" را مشاهده کنید.
|
||||
|
||||
### نصب از طریق Source
|
||||
|
||||
|
@ -45,7 +45,7 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
در حالت intercative، شما یک command line برای درج query های خود دریافت می کنید.
|
||||
|
||||
اگر 'multiline' مشخص نشده باشد (به صورت پیش فرض): برای اجرای یک query، دکمه Enter را بزنید. سیمی کالن در انتهای query اجباری نیست. برای درج یک query چند خطی (multiline)، دکمه ی بک اسلش `\` را قبل از line feed فشار دهید. بعد از فشردن Enter، از شما برای درج خط بعدی query درخواست خواهد شد.
|
||||
اگر 'multiline' مشخص نشده باشد (به صورت پیش فرض): برای اجرای یک query، دکمه Enter را بزنید. سیمی کالن در انتهای query اجباری نیست. برای درج یک query چند خطی (multiline)، دکمه ی بک اسلش `\` را قبل از line feed فشار دهید. بعد از فشردن Enter، از شما برای درج خط بعدی query درخواست خواهد شد.
|
||||
|
||||
اگر چند خطی (multiline) مشخص شده باشد: برای اجرای query، در انتها سیمی کالن را وارد کنید و سپس Enter بزنید. اگر سیمی کالن از انتهای خط حذف می شد، از شما برای درج خط جدید query درخواست می شد.
|
||||
|
||||
@ -55,7 +55,7 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
command line برا پایه 'readline' (و 'history' یا 'libedit'، یه بدون کتابخانه بسته به build) می باشد. به عبارت دیگر، این محیط از shortcut های آشنا استفاده می کند و history دستورات را نگه می دار. history ها در فایل ~/.clickhouse-client-history نوشته می شوند.
|
||||
|
||||
به صورت پیش فرض فرمت خروجی PrettyCompact می باشد. شما میتوانید از طریق دستور FORMAT در یک query، یا با مشخص کردن `\G` در انتهای query، استفاده از آرگومان های `--format` یا `--vertical` یا از کانفیگ فایل کلاینت، فرمت خروجی را مشخص کنید.
|
||||
به صورت پیش فرض فرمت خروجی PrettyCompact می باشد. شما میتوانید از طریق دستور FORMAT در یک query، یا با مشخص کردن `\G` در انتهای query، استفاده از آرگومان های `--format` یا `--vertical` یا از کانفیگ فایل کلاینت، فرمت خروجی را مشخص کنید.
|
||||
|
||||
برای خروج از کلاینت، Ctrl-D (یا Ctrl+C) را فشار دهید؛ و یا یکی از دستورات زیر را به جای اجرای query اجرا کنید: "exit", "quit", "logout", "exit;", "quit;", "logout;", "q", "Q", ":q"
|
||||
|
||||
@ -68,7 +68,7 @@ command line برا پایه 'readline' (و 'history' یا 'libedit'، یه بد
|
||||
|
||||
شما میتوانید query های طولانی را با فشردن Ctrl-C کنسل کنید. هر چند، بعد از این کار همچنان نیاز به انتظار چند ثانیه ای برای قطع کردن درخواست توسط سرور می باشید. امکان کنسل کردن یک query در مراحل خاص وجود ندارد. اگر شما صبر نکنید و برای بار دوم Ctrl+C را وارد کنید از client خارج می شوید.
|
||||
|
||||
کلاینت commant-line اجازه ی پاس دادن داده های external (جداول موقت external) را برای query ها می دهد. برای اطلاعات بیشتر به بخش "داده های External برای پردازش query" مراجعه کنید.
|
||||
کلاینت commant-line اجازه ی پاس دادن داده های external (جداول موقت external) را برای query ها می دهد. برای اطلاعات بیشتر به بخش "داده های External برای پردازش query" مراجعه کنید.
|
||||
|
||||
## پیکربندی {#interfaces_cli_configuration}
|
||||
|
||||
|
@ -43,9 +43,9 @@ Format | INSERT | SELECT
|
||||
|
||||
Dates با فرمت YYY-MM-DD نوشته می شوند و به همین حالت پارس می شوند، اما با هر کاراکتری به عنوان جدا کننده. Dates به همراه زمان با فرمت YYYY-MM-DD hh:mm:ss نوشته می شوند و با همین فرمت پارس می شوند، اما با هر کاراکتری به عنوان جداکننده. این در منطقه زمان سیستم در زمانی که کلاینت یا سرور شروع می شود (بسته به اینکه کدام یک از داده ها را تشکیل می دهد) رخ می دهد. برای تاریخ همراه با زمان DST مشخص نمی شود. پس اگر یک دامپ دارای زمان DST باشد، دامپ، داده ها را به طور غیرمستقیم مطابقت نمی دهد و پارسینگ، یکی از دو ساعت را انتخاب خواهد کرد. در طول عملیات خواندن، تاریخ ها و تاریخ و ساعت های نادرست می توانند به صورت null و یا natural overflow پارس شوند، بدون اینکه پیغام خطایی نمایش دهند.
|
||||
|
||||
به عنوان یک استثنا، پارس کردن تاریخ به همراه ساعت، اگر مقدار دقیقا شامل 10 عدد decimal باشد، به عنوان فرمت unix timestamp پشتیبانی خواهد کرد. خروجی وابسته به time-zone نمی باشد. فرمت های YYYY-MM-DD hh: mm: ss و NNNNNNNNNN به صورت خودکار تمایز می یابند.
|
||||
به عنوان یک استثنا، پارس کردن تاریخ به همراه ساعت، اگر مقدار دقیقا شامل 10 عدد decimal باشد، به عنوان فرمت unix timestamp پشتیبانی خواهد کرد. خروجی وابسته به time-zone نمی باشد. فرمت های YYYY-MM-DD hh: mm: ss و NNNNNNNNNN به صورت خودکار تمایز می یابند.
|
||||
|
||||
رشته های دارای کاراکتر های ویژه backslash-escaped چاپ می شوند. escape های در ادامه برای خروجی استفاده می شوند: `\b`، `\f`، `\r`، `\n`، `\t`، `\0`, `\'`، `\\`. پارسر همچنین از `\a`، `\v`، و `\xHH` (hex escape) و هر `\c` پشتیبانی می کند. بدین ترتیب خواندن داده ها از فرمت line feed که می تواند به صورت `\n` یا `\` نوشته شود پشتیبانی می کند. برای مثال، رشته ی `Hello world` به همراه line feed بین کلمات به جای space می تواند به هر یک از حالات زیر پارس شود::
|
||||
رشته های دارای کاراکتر های ویژه backslash-escaped چاپ می شوند. escape های در ادامه برای خروجی استفاده می شوند: `\b`، `\f`، `\r`، `\n`، `\t`، `\0`, `\'`، `\\`. پارسر همچنین از `\a`، `\v`، و `\xHH` (hex escape) و هر `\c` پشتیبانی می کند. بدین ترتیب خواندن داده ها از فرمت line feed که می تواند به صورت `\n` یا `\` نوشته شود پشتیبانی می کند. برای مثال، رشته ی `Hello world` به همراه line feed بین کلمات به جای space می تواند به هر یک از حالات زیر پارس شود::
|
||||
|
||||
</div>
|
||||
|
||||
@ -146,7 +146,7 @@ SearchPhrase=baku count()=1000
|
||||
|
||||
Comma Separated Values format ([RFC](https://tools.ietf.org/html/rfc4180)).
|
||||
|
||||
زمانی که از این روش برای فرمت استفاده می شود، سطر ها با دابل کوتیشن enclosed می شوند. دابل کوتیشن داخل یک رشته خروجی آن به صورت دو دابل کوتیشن در یک سطر است. قانون دیگری برای escape کردن کاراکترها وجود ندارد. تاریخ و تاریخ-ساعت در دابل کوتیشن ها enclosed می شوند. اعداد بدون دابل کوتیشن در خروجی می آیند. مقادیر با جدا کننده * مشخص می شوند. سطر ها با استفاده از line feed (LF) جدا می شوند. آرایه ها در csv به این صورت serialize می شوند: ابتدا آرایه به یک رشته با فرمت TabSeparate سریالایز می شوند، و سپس رشته ی حاصل در دابل کوتیشن برای csv ارسال می شود. Tuple ها در فرمت CSV در ستون های جدا سریالایز می شوند (به این ترتیب، nest ها در tuble از دست میروند)
|
||||
زمانی که از این روش برای فرمت استفاده می شود، سطر ها با دابل کوتیشن enclosed می شوند. دابل کوتیشن داخل یک رشته خروجی آن به صورت دو دابل کوتیشن در یک سطر است. قانون دیگری برای escape کردن کاراکترها وجود ندارد. تاریخ و تاریخ-ساعت در دابل کوتیشن ها enclosed می شوند. اعداد بدون دابل کوتیشن در خروجی می آیند. مقادیر با جدا کننده * مشخص می شوند. سطر ها با استفاده از line feed (LF) جدا می شوند. آرایه ها در csv به این صورت serialize می شوند: ابتدا آرایه به یک رشته با فرمت TabSeparate سریالایز می شوند، و سپس رشته ی حاصل در دابل کوتیشن برای csv ارسال می شود. Tuple ها در فرمت CSV در ستون های جدا سریالایز می شوند (به این ترتیب، nest ها در tuble از دست میروند)
|
||||
|
||||
</div>
|
||||
|
||||
@ -340,7 +340,7 @@ JSON با جاوااسکریپت سازگار است. برای اطمینان ا
|
||||
|
||||
## Pretty
|
||||
|
||||
خروجی داده ها به صورت جداول Unicode-art، همچنین استفاده از ANSI-escape برای تنظیم رنگ های ترمینال. یک جدول کامل کشیده می شود، و هر سطر دو خط از ترمینال را اشغال می کند. هر بلاکِ نتیجه، به عنوان یک جدول جدا چاپ می شود.پس بلاک ها می توانند بدون بافر کردن نتایج چاپ شوند (بافرینگ برای pre-calculate تمام مقادیر قابل مشاهده ضروری است). برای جلوگیری از دامپ زیاد داده ها در ترمینال، 10 هزار سطر اول چاپ می شوند. اگر تعداد سطر های بزرگتر مساوی 10 هزار باشد، پیغام " 10 هزار اول نمایش داده شد" چاپ می شود. این فرمت فقط مناسب خروجی نتایج query ها می باشد، نه برای پارس کردن (دریافت داده ها و درج آن در جدول).
|
||||
خروجی داده ها به صورت جداول Unicode-art، همچنین استفاده از ANSI-escape برای تنظیم رنگ های ترمینال. یک جدول کامل کشیده می شود، و هر سطر دو خط از ترمینال را اشغال می کند. هر بلاکِ نتیجه، به عنوان یک جدول جدا چاپ می شود.پس بلاک ها می توانند بدون بافر کردن نتایج چاپ شوند (بافرینگ برای pre-calculate تمام مقادیر قابل مشاهده ضروری است). برای جلوگیری از دامپ زیاد داده ها در ترمینال، 10 هزار سطر اول چاپ می شوند. اگر تعداد سطر های بزرگتر مساوی 10 هزار باشد، پیغام " 10 هزار اول نمایش داده شد" چاپ می شود. این فرمت فقط مناسب خروجی نتایج query ها می باشد، نه برای پارس کردن (دریافت داده ها و درج آن در جدول).
|
||||
|
||||
فرمت Pretty از total values (هنگام استفاده از WITH TOTALS) و extreme (هنگام که 'extremes' برابر با 1 است) برای خروجی پشتیبانی می کند. در این موارد، total values و extreme values بعد از نمایش داده های اصلی در جداول جدا، چاپ می شوند. مثال (برای فرمت PrettyCompact نمایش داده شده است):
|
||||
|
||||
|
@ -87,7 +87,7 @@ $ echo 'SELECT 1 FORMAT Pretty' | curl 'http://localhost:8123/?' --data-binary @
|
||||
|
||||
<div dir="rtl" markdown="1">
|
||||
|
||||
برای query های INSERT متد POST ضروری است. در این مورد، شما می توانید ابتدای query خود را در URL parameter بنویسید، و از POST برای پاس داده داده ها برای درج استفاده کنید. داده ی برای درج می تواند، برای مثال یک دامپ tab-separated شده از MySQL باشد. به این ترتیب، query INSERT جایگزین LOAD DATA LOCAL INFILE از MySQL می شود.
|
||||
برای query های INSERT متد POST ضروری است. در این مورد، شما می توانید ابتدای query خود را در URL parameter بنویسید، و از POST برای پاس داده داده ها برای درج استفاده کنید. داده ی برای درج می تواند، برای مثال یک دامپ tab-separated شده از MySQL باشد. به این ترتیب، query INSERT جایگزین LOAD DATA LOCAL INFILE از MySQL می شود.
|
||||
|
||||
مثال: ساخت جدول
|
||||
|
||||
@ -175,7 +175,7 @@ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @-
|
||||
|
||||
شما می توانید از فرمت فشرده سازی داخلی ClickHouse در هنگان انتقال داده ها استفاده کنید. این فشرده سازی داده، یک فرمت غیراستاندارد است، و شما باید از برنامه مخصوص فشرده سازی ClickHouse برای استفاده از آن استفاده کنید. (این برنامه در هنگام نصب پکیج clickhouse-client نصب شده است)
|
||||
|
||||
اگر شما در URL پارامتر 'compress=1' را قرار دهید، سرور داده های ارسالی به شما را فشرده سازی می کند. اگر شما پارامتر 'decompress=1' را در URL ست کنید، سرور داده های ارسالی توسط متد POST را decompress می کند.
|
||||
اگر شما در URL پارامتر 'compress=1' را قرار دهید، سرور داده های ارسالی به شما را فشرده سازی می کند. اگر شما پارامتر 'decompress=1' را در URL ست کنید، سرور داده های ارسالی توسط متد POST را decompress می کند.
|
||||
|
||||
همچنین استفاده از فشرده سازی استاندارد gzip در HTTP ممکن است. برای ارسال درخواست POST و فشرده سازی آن به صورت gzip، هدر `Content-Encoding: gzip` را به request خود اضافه کنید. برای اینکه ClickHouse، response فشرده شده به صورت gzip برای شما ارسال کند، ابتدا باید `enable_http_compression` را در تنظیمات ClickHouse فعال کنید و در ادامه هدر `Accept-Encoding: gzip` را به درخواست خود اضافه کنید.
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## مدیریت دیتابیس ستون گرای واقعی
|
||||
|
||||
در یک مدیریت دیتابیس ستون گرای واقعی، هیچ مقداری فضای اضافی برای ذخیره سازی ندارد. برای مثال، این به این معنیست که برای مقادیر، constant-length باید پشتیبانی شوند تا از ذخیره سازی طول مقدار به عنوان یه عدد integer کنار مقدار جلوگیری شود. در این مورد، یک میلیارد مقدار Uint8 باید در واقع در حالت غیرفشرده 1 گیگابایت فضا اشغال کند، در غیراین صورت به شدت بر عملکرد CPU تاثیر میگذارد. این خیلی مهم هست که داده ها به صورت compact ذخیره سازی شوند حتی زمانی که uncompressed هستند، از آنجا که سرعت سرعت decompress (CPU Usage) عمدتا به حجم داده های uncompress بستگی دارد.
|
||||
در یک مدیریت دیتابیس ستون گرای واقعی، هیچ مقداری فضای اضافی برای ذخیره سازی ندارد. برای مثال، این به این معنیست که برای مقادیر، constant-length باید پشتیبانی شوند تا از ذخیره سازی طول مقدار به عنوان یه عدد integer کنار مقدار جلوگیری شود. در این مورد، یک میلیارد مقدار Uint8 باید در واقع در حالت غیرفشرده 1 گیگابایت فضا اشغال کند، در غیراین صورت به شدت بر عملکرد CPU تاثیر میگذارد. این خیلی مهم هست که داده ها به صورت compact ذخیره سازی شوند حتی زمانی که uncompressed هستند، از آنجا که سرعت سرعت decompress (CPU Usage) عمدتا به حجم داده های uncompress بستگی دارد.
|
||||
|
||||
این بسیار قابل توجه است چون سیستم هایی وجود دارند که توانایی ذخیره سازی مقادیر ستون ها را به صورت جداگانه دارند، اما به دلیل بهینه سازی آنها برای دیگر سناریو ها، نمیتوانند به طور موثر پردازش های تحیلی انجام دهند. برای مثال HBase، BigTable، Cassandra و HyperTable. در این سیستم ها، شما توان عملیاتی حدود صدها هزار سطر در ثانیه را دارید، اما نه صدها میلیون سطر در ثانیه.
|
||||
|
||||
|
@ -33,7 +33,7 @@ SELECT
|
||||
|
||||
## Особенности работы с типами данных
|
||||
|
||||
При создании кортежа "на лету" ClickHouse автоматически определяет тип каждого аргументов как минимальный из типов, который может сохранить значение аргумента. Если аргумент — [NULL](../query_language/syntax.md#null-literal), то тип элемента кортежа — [Nullable](nullable.md).
|
||||
При создании кортежа "на лету" ClickHouse автоматически определяет тип каждого аргументов как минимальный из типов, который может сохранить значение аргумента. Если аргумент — [NULL](../query_language/syntax.md#null-literal), то тип элемента кортежа — [Nullable](nullable.md).
|
||||
|
||||
Пример автоматического определения типа данных:
|
||||
|
||||
|
@ -44,13 +44,13 @@ void reinsert(const Value & x)
|
||||
memcpy(&buf[place_value], &x, sizeof(x));
|
||||
```
|
||||
|
||||
**6.** В выражениях `if`, `for`, `while` и т.д. перед открывающей скобкой ставится пробел (в отличие от вызовов функций).
|
||||
**6.** В выражениях `if`, `for`, `while` и т.д. перед открывающей скобкой ставится пробел (в отличие от вызовов функций).
|
||||
|
||||
```cpp
|
||||
for (size_t i = 0; i < rows; i += storage.index_granularity)
|
||||
```
|
||||
|
||||
**7.** Вокруг бинарных операторов (`+`, `-`, `*`, `/`, `%`, ...), а также тернарного оператора `?:` ставятся пробелы.
|
||||
**7.** Вокруг бинарных операторов (`+`, `-`, `*`, `/`, `%`, ...), а также тернарного оператора `?:` ставятся пробелы.
|
||||
|
||||
```cpp
|
||||
UInt16 year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0');
|
||||
@ -58,7 +58,7 @@ UInt8 month = (s[5] - '0') * 10 + (s[6] - '0');
|
||||
UInt8 day = (s[8] - '0') * 10 + (s[9] - '0');
|
||||
```
|
||||
|
||||
**8.** Если ставится перенос строки, то оператор пишется на новой строке, и перед ним увеличивается отступ.
|
||||
**8.** Если ставится перенос строки, то оператор пишется на новой строке, и перед ним увеличивается отступ.
|
||||
|
||||
```cpp
|
||||
if (elapsed_ns)
|
||||
@ -67,7 +67,7 @@ if (elapsed_ns)
|
||||
<< bytes_read_on_server * 1000.0 / elapsed_ns << " MB/s.) ";
|
||||
```
|
||||
|
||||
**9.** Внутри строки можно, выполнять выравнивание с помощью пробелов.
|
||||
**9.** Внутри строки можно, выполнять выравнивание с помощью пробелов.
|
||||
|
||||
```cpp
|
||||
dst.ClickLogID = click.LogID;
|
||||
@ -85,7 +85,7 @@ dst.ClickGoodEvent = click.GoodEvent;
|
||||
|
||||
**13.** Оператор `[]` не отделяется пробелами.
|
||||
|
||||
**14.** В выражении `template <...>`, между `template` и `<` ставится пробел, а после `<` и до `>` не ставится.
|
||||
**14.** В выражении `template <...>`, между `template` и `<` ставится пробел, а после `<` и до `>` не ставится.
|
||||
|
||||
```cpp
|
||||
template <typename TKey, typename TValue>
|
||||
@ -257,7 +257,7 @@ void executeQuery(
|
||||
*/
|
||||
```
|
||||
|
||||
Пример взят с ресурса [http://home.tamk.fi/~jaalto/course/coding-style/doc/unmaintainable-code/](http://home.tamk.fi/~jaalto/course/coding-style/doc/unmaintainable-code/).
|
||||
Пример взят с ресурса [http://home.tamk.fi/~jaalto/course/coding-style/doc/unmaintainable-code/](http://home.tamk.fi/~jaalto/course/coding-style/doc/unmaintainable-code/).
|
||||
|
||||
**7.** Нельзя писать мусорные комментарии (автор, дата создания...) в начале каждого файла.
|
||||
|
||||
@ -305,7 +305,7 @@ void executeQuery(
|
||||
size_t max_block_size;
|
||||
```
|
||||
|
||||
**2.** Имена функций (методов) camelCase с маленькой буквы.
|
||||
**2.** Имена функций (методов) camelCase с маленькой буквы.
|
||||
|
||||
```cpp
|
||||
std::string getName() const override { return "Memory"; }
|
||||
@ -348,7 +348,7 @@ class IBlockInputStream
|
||||
bool info_successfully_loaded = false;
|
||||
```
|
||||
|
||||
**9.** В именах `define` и глобальных констант используется ALL_CAPS с подчёркиванием.
|
||||
**9.** В именах `define` и глобальных констант используется ALL_CAPS с подчёркиванием.
|
||||
|
||||
```cpp
|
||||
#define MAX_SRC_TABLE_NAMES_TO_STORE 1000
|
||||
|
File diff suppressed because one or more lines are too long
@ -166,7 +166,7 @@ SELECT Origin, count(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND
|
||||
Q4. Количество задержек по перевозчикам за 2007 год
|
||||
|
||||
``` sql
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
```
|
||||
|
||||
Q5. Процент задержек по перевозчикам за 2007 год
|
||||
|
@ -72,9 +72,9 @@ ClickHouse - столбцовая система управления базам
|
||||
|
||||
### По вводу-выводу
|
||||
|
||||
1. Для выполнения аналитического запроса, требуется прочитать небольшое количество столбцов таблицы. В столбцовой БД для этого можно читать только нужные данные. Например, если вам требуется только 5 столбцов из 100, то следует рассчитывать на 20-кратное уменьшение ввода-вывода.
|
||||
2. Так как данные читаются пачками, то их проще сжимать. Данные, лежащие по столбцам также лучше сжимаются. За счёт этого, дополнительно уменьшается объём ввода-вывода.
|
||||
3. За счёт уменьшения ввода-вывода, больше данных влезает в системный кэш.
|
||||
1. Для выполнения аналитического запроса, требуется прочитать небольшое количество столбцов таблицы. В столбцовой БД для этого можно читать только нужные данные. Например, если вам требуется только 5 столбцов из 100, то следует рассчитывать на 20-кратное уменьшение ввода-вывода.
|
||||
2. Так как данные читаются пачками, то их проще сжимать. Данные, лежащие по столбцам также лучше сжимаются. За счёт этого, дополнительно уменьшается объём ввода-вывода.
|
||||
3. За счёт уменьшения ввода-вывода, больше данных влезает в системный кэш.
|
||||
|
||||
Например, для запроса "посчитать количество записей для каждой рекламной системы", требуется прочитать один столбец "идентификатор рекламной системы", который занимает 1 байт в несжатом виде. Если большинство переходов было не с рекламных систем, то можно рассчитывать хотя бы на десятикратное сжатие этого столбца. При использовании быстрого алгоритма сжатия, возможно разжатие данных со скоростью более нескольких гигабайт несжатых данных в секунду. То есть, такой запрос может выполняться со скоростью около нескольких миллиардов строк в секунду на одном сервере. На практике, такая скорость действительно достигается.
|
||||
|
||||
|
@ -59,10 +59,10 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
При выполнении запроса, клиент показывает:
|
||||
|
||||
1. Прогресс выполнение запроса, который обновляется не чаще, чем 10 раз в секунду (по умолчанию). При быстрых запросах, прогресс может не успеть отобразиться.
|
||||
2. Отформатированный запрос после его парсинга - для отладки.
|
||||
3. Результат в заданном формате.
|
||||
4. Количество строк результата, прошедшее время, а также среднюю скорость выполнения запроса.
|
||||
1. Прогресс выполнение запроса, который обновляется не чаще, чем 10 раз в секунду (по умолчанию). При быстрых запросах, прогресс может не успеть отобразиться.
|
||||
2. Отформатированный запрос после его парсинга - для отладки.
|
||||
3. Результат в заданном формате.
|
||||
4. Количество строк результата, прошедшее время, а также среднюю скорость выполнения запроса.
|
||||
|
||||
Вы можете прервать длинный запрос, нажав Ctrl+C. При этом вам всё равно придётся чуть-чуть подождать, пока сервер остановит запрос. На некоторых стадиях выполнения, запрос невозможно прервать. Если вы не дождётесь и нажмёте Ctrl+C второй раз, то клиент будет завершён.
|
||||
|
||||
@ -82,7 +82,7 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
### Параметры командной строки
|
||||
|
||||
- `--host, -h` - имя сервера, по умолчанию - localhost. Вы можете использовать как имя, так и IPv4 или IPv6 адрес.
|
||||
- `--host, -h` - имя сервера, по умолчанию - localhost. Вы можете использовать как имя, так и IPv4 или IPv6 адрес.
|
||||
- `--port` - порт, к которому соединяться, по умолчанию - 9000. Замечу, что для HTTP и родного интерфейса используются разные порты.
|
||||
- `--user, -u` - имя пользователя, по умолчанию - default.
|
||||
- `--password` - пароль, по умолчанию - пустая строка.
|
||||
|
@ -135,7 +135,7 @@ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @-
|
||||
Если вы указали в URL decompress=1, то сервер будет разжимать те данные, которые вы передаёте ему POST-ом.
|
||||
|
||||
Также имеется возможность использования стандартного сжатия HTTP, на основе gzip. Чтобы отправить POST-запрос, сжатый с помощью gzip, добавьте к запросу заголовок `Content-Encoding: gzip`.
|
||||
Чтобы ClickHouse сжимал ответ на запрос с помощью gzip, необходимо добавить `Accept-Encoding: gzip` к заголовкам запроса, и включить настройку ClickHouse `enable_http_compression`.
|
||||
Чтобы ClickHouse сжимал ответ на запрос с помощью gzip, необходимо добавить `Accept-Encoding: gzip` к заголовкам запроса, и включить настройку ClickHouse `enable_http_compression`.
|
||||
|
||||
Это может быть использовано для уменьшения трафика по сети при передаче большого количества данных, а также для создания сразу сжатых дампов.
|
||||
|
||||
@ -159,13 +159,13 @@ $ echo 'SELECT number FROM numbers LIMIT 10' | curl 'http://localhost:8123/?data
|
||||
|
||||
Имя пользователя и пароль могут быть указаны в одном из двух вариантов:
|
||||
|
||||
1. С использованием HTTP Basic Authentification. Пример:
|
||||
1. С использованием HTTP Basic Authentification. Пример:
|
||||
|
||||
```bash
|
||||
echo 'SELECT 1' | curl 'http://user:password@localhost:8123/' -d @-
|
||||
```
|
||||
|
||||
2. В параметрах URL user и password. Пример:
|
||||
2. В параметрах URL user и password. Пример:
|
||||
|
||||
```bash
|
||||
echo 'SELECT 1' | curl 'http://localhost:8123/?user=user&password=password' -d @-
|
||||
|
@ -51,9 +51,9 @@ ClickHouse поддерживает таблицы с первичным клю
|
||||
|
||||
ClickHouse предоставляет различные способы разменять точность вычислений на производительность:
|
||||
|
||||
1. Система содержит агрегатные функции для приближённого вычисления количества различных значений, медианы и квантилей.
|
||||
2. Поддерживается возможность выполнить запрос на основе части (выборки) данных и получить приближённый результат. При этом, с диска будет считано пропорционально меньше данных.
|
||||
3. Поддерживается возможность выполнить агрегацию не для всех ключей, а для ограниченного количества первых попавшихся ключей. При выполнении некоторых условий на распределение ключей в данных, это позволяет получить достаточно точный результат с использованием меньшего количества ресурсов.
|
||||
1. Система содержит агрегатные функции для приближённого вычисления количества различных значений, медианы и квантилей.
|
||||
2. Поддерживается возможность выполнить запрос на основе части (выборки) данных и получить приближённый результат. При этом, с диска будет считано пропорционально меньше данных.
|
||||
3. Поддерживается возможность выполнить агрегацию не для всех ключей, а для ограниченного количества первых попавшихся ключей. При выполнении некоторых условий на распределение ключей в данных, это позволяет получить достаточно точный результат с использованием меньшего количества ресурсов.
|
||||
|
||||
## Репликация данных и поддержка целостности
|
||||
|
||||
|
@ -456,7 +456,7 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
- requireTLSv1_2 - Требование соединения TLSv1.2. Допустимые значения: ``true``, ``false``.
|
||||
- fips - Активация режима OpenSSL FIPS. Поддерживается, если версия OpenSSL, с которой собрана библиотека поддерживает fips.
|
||||
- privateKeyPassphraseHandler - Класс (подкласс PrivateKeyPassphraseHandler)запрашивающий кодовую фразу доступа к секретному ключу. Например, ``<privateKeyPassphraseHandler>``, ``<name>KeyFileHandler</name>``, ``<options><password>test</password></options>``, ``</privateKeyPassphraseHandler>``.
|
||||
- invalidCertificateHandler - Класс (подкласс CertificateHandler) для подтвеждения невалидных сертификатов. Например, ``<invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>``.
|
||||
- invalidCertificateHandler - Класс (подкласс CertificateHandler) для подтвеждения невалидных сертификатов. Например, ``<invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>``.
|
||||
- disableProtocols - Запрещенные к искользованию протоколы.
|
||||
- preferServerCiphers - Предпочтение серверных шифров на клиенте.
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
После установки `readonly = 1`пользователь не может изменить настройки `readonly` и `allow_ddl` в текущей сессии.
|
||||
|
||||
При использовании метода `GET` в [HTTP интерфейсе](../../interfaces/http.md#http_interface), `readonly = 1` устанавливается автоматически. Для изменения данных используйте метод `POST`.
|
||||
При использовании метода `GET` в [HTTP интерфейсе](../../interfaces/http.md#http_interface), `readonly = 1` устанавливается автоматически. Для изменения данных используйте метод `POST`.
|
||||
|
||||
**Значение по умолчанию**
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
- 0 — DDL запросы не разрешены.
|
||||
- 1 — DDL запросы разрешены.
|
||||
|
||||
Если `allow_ddl = 0`, то невозможно выполнить `SET allow_ddl = 1` для текущей сессии.
|
||||
Если `allow_ddl = 0`, то невозможно выполнить `SET allow_ddl = 1` для текущей сессии.
|
||||
|
||||
**Значение по умолчанию**
|
||||
|
||||
|
@ -16,7 +16,7 @@ ClickHouse применяет настройку в тех случаях, ко
|
||||
|
||||
Возможные значения:
|
||||
|
||||
- `deny` - (по умолчанию) запрещает использование таких подзапросов (При попытке использование вернет исключение "Double-distributed IN/JOIN subqueries is denied");
|
||||
- `deny` - (по умолчанию) запрещает использование таких подзапросов (При попытке использование вернет исключение "Double-distributed IN/JOIN subqueries is denied");
|
||||
- `local` - заменит базу данных и таблицу в подзапросе на локальные для конечного сервера (шарда), оставив обычный `IN` / `JOIN`;
|
||||
- `global` - заменит запрос `IN` / `JOIN` на `GLOBAL IN` / `GLOBAL JOIN`;
|
||||
- `allow` - разрешает использование таких подзапросов.
|
||||
|
@ -31,7 +31,7 @@ CollapsingMergeTree(EventDate, (CounterID, EventDate, intHash32(UniqID), VisitID
|
||||
|
||||
Существует несколько способов получения полностью "схлопнутых" данных из таблицы типа `CollapsingMergeTree`:
|
||||
|
||||
1. Написать запрос с GROUP BY и агрегатными функциями, учитывающими знак. Например, чтобы посчитать количество, надо вместо count() написать sum(Sign); чтобы посчитать сумму чего-либо, надо вместо sum(x) написать sum(Sign \* x) и т. п., а также добавить HAVING sum(Sign) `>` 0. Не все величины можно посчитать подобным образом. Например, агрегатные функции min, max не могут быть переписаны.
|
||||
2. Если необходимо вынимать данные без агрегации (например, проверить наличие строк, самые новые значения которых удовлетворяют некоторым условиям), можно использовать модификатор FINAL для секции FROM. Это вариант существенно менее эффективен.
|
||||
1. Написать запрос с GROUP BY и агрегатными функциями, учитывающими знак. Например, чтобы посчитать количество, надо вместо count() написать sum(Sign); чтобы посчитать сумму чего-либо, надо вместо sum(x) написать sum(Sign \* x) и т. п., а также добавить HAVING sum(Sign) `>` 0. Не все величины можно посчитать подобным образом. Например, агрегатные функции min, max не могут быть переписаны.
|
||||
2. Если необходимо вынимать данные без агрегации (например, проверить наличие строк, самые новые значения которых удовлетворяют некоторым условиям), можно использовать модификатор FINAL для секции FROM. Это вариант существенно менее эффективен.
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/operations/table_engines/collapsingmergetree/) <!--hide-->
|
||||
|
@ -40,7 +40,7 @@ default
|
||||
...
|
||||
```
|
||||
|
||||
При обработке записи ClickHouse проверит правила в секции `pattern`. Если имя метрики соответствует шаблону `regexp`, то применяются правила из `pattern`, в противном случае из `default`.
|
||||
При обработке записи ClickHouse проверит правила в секции `pattern`. Если имя метрики соответствует шаблону `regexp`, то применяются правила из `pattern`, в противном случае из `default`.
|
||||
|
||||
Поля шаблона правил.
|
||||
|
||||
|
@ -122,7 +122,7 @@ Kafka SETTINGS
|
||||
Аналогично GraphiteMergeTree, движок Kafka поддерживает расширенную конфигурацию с помощью конфигурационного файла ClickHouse. Существует два конфигурационных ключа, которые можно использовать - глобальный (`kafka`) и по топикам (`kafka_*`). Сначала применяется глобальная конфигурация, затем конфигурация по топикам (если она существует).
|
||||
|
||||
```xml
|
||||
<!-- Global configuration options for all tables of Kafka engine type -->
|
||||
<!-- Global configuration options for all tables of Kafka engine type -->
|
||||
<kafka>
|
||||
<debug>cgrp</debug>
|
||||
<auto_offset_reset>smallest</auto_offset_reset>
|
||||
|
@ -159,10 +159,10 @@ sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data
|
||||
|
||||
Если на одном из серверов исчезли все данные и метаданные, восстановление делается следующим образом:
|
||||
|
||||
1. Установите на сервер ClickHouse. Корректно пропишите подстановки в конфигурационном файле, отвечающие за идентификатор шарда и реплики, если вы их используете.
|
||||
2. Если у вас были нереплицируемые таблицы, которые должны быть вручную продублированы на серверах, скопируйте их данные (в директории `/var/lib/clickhouse/data/db_name/table_name/`) с реплики.
|
||||
3. Скопируйте с реплики определения таблиц, находящиеся в `/var/lib/clickhouse/metadata/`. Если в определениях таблиц, идентификатор шарда или реплики, прописаны в явном виде - исправьте их, чтобы они соответствовали данной реплике. (Альтернативный вариант - запустить сервер и сделать самостоятельно все запросы `ATTACH TABLE`, которые должны были бы быть в соответствующих .sql файлах в `/var/lib/clickhouse/metadata/`.)
|
||||
4. Создайте в ZooKeeper узел `/path_to_table/replica_name/flags/force_restore_data` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data`
|
||||
1. Установите на сервер ClickHouse. Корректно пропишите подстановки в конфигурационном файле, отвечающие за идентификатор шарда и реплики, если вы их используете.
|
||||
2. Если у вас были нереплицируемые таблицы, которые должны быть вручную продублированы на серверах, скопируйте их данные (в директории `/var/lib/clickhouse/data/db_name/table_name/`) с реплики.
|
||||
3. Скопируйте с реплики определения таблиц, находящиеся в `/var/lib/clickhouse/metadata/`. Если в определениях таблиц, идентификатор шарда или реплики, прописаны в явном виде - исправьте их, чтобы они соответствовали данной реплике. (Альтернативный вариант - запустить сервер и сделать самостоятельно все запросы `ATTACH TABLE`, которые должны были бы быть в соответствующих .sql файлах в `/var/lib/clickhouse/metadata/`.)
|
||||
4. Создайте в ZooKeeper узел `/path_to_table/replica_name/flags/force_restore_data` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data`
|
||||
|
||||
Затем запустите сервер (перезапустите, если уже запущен). Данные будут скачаны с реплик.
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
ClickHouse поддерживает также:
|
||||
|
||||
- [Параметрические агрегатные функции](parametric_functions.md#aggregate_functions_parametric), которые помимо столбцов принимаю и другие параметры.
|
||||
- [Комбинаторы](combinators.md#aggregate_functions_combinators), которые изменяют поведение агрегатных фунций.
|
||||
- [Параметрические агрегатные функции](parametric_functions.md#aggregate_functions_parametric), которые помимо столбцов принимаю и другие параметры.
|
||||
- [Комбинаторы](combinators.md#aggregate_functions_combinators), которые изменяют поведение агрегатных фунций.
|
||||
|
||||
## Обработка NULL
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
Считает количество строк. Принимает ноль аргументов, возвращает UInt64.
|
||||
Не поддерживается синтаксис `COUNT (DISTINCT x)`. Для этого существует агрегатная функция`uniq`.
|
||||
|
||||
Запрос вида `SELECT count() FROM table` не оптимизируется, так как количество записей в таблице нигде не хранится отдельно. Из таблицы будет выбран какой-нибудь достаточно маленький столбец, и будет посчитано количество значений в нём.
|
||||
Запрос вида `SELECT count() FROM table` не оптимизируется, так как количество записей в таблице нигде не хранится отдельно. Из таблицы будет выбран какой-нибудь достаточно маленький столбец, и будет посчитано количество значений в нём.
|
||||
|
||||
## any(x) {#agg_function-any}
|
||||
|
||||
|
@ -112,10 +112,10 @@ SELECT * FROM system.parts WHERE active
|
||||
```bash
|
||||
$ ls -l /var/lib/clickhouse/data/test/visits/
|
||||
total 48
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
|
||||
-rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
|
||||
drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
|
||||
-rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
|
||||
```
|
||||
|
||||
Здесь `20140317_20140323_2_2_0`, `20140317_20140323_4_4_0` - директории кусков.
|
||||
|
@ -116,7 +116,7 @@ CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]name [TO[db.]name] [ENGINE = eng
|
||||
|
||||
При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
|
||||
|
||||
Материализованное представление работает следующим образом: при вставлении данных в таблицу, указанную в SELECT, часть вставленных данных конвертируется запросом, а результат вставляется в представление.
|
||||
Материализованное представление работает следующим образом: при вставлении данных в таблицу, указанную в SELECT, часть вставленных данных конвертируется запросом, а результат вставляется в представление.
|
||||
|
||||
Обычные представления не хранят никаких данных, а всего лишь производят чтение из другой таблицы. То есть, обычное представление - не более чем сохранённый запрос. При чтении из представления, этот сохранённый запрос, используется в качестве подзапроса в секции FROM.
|
||||
|
||||
|
@ -24,10 +24,10 @@
|
||||
</dictionary>
|
||||
```
|
||||
|
||||
- name - Идентификатор, под которым словарь будет доступен для использования. Используйте символы `[a-zA-Z0-9_\-]`.
|
||||
- [source](external_dicts_dict_sources.md) - Источник словаря.
|
||||
- [layout](external_dicts_dict_layout.md) - Размещение словаря в памяти.
|
||||
- [structure](external_dicts_dict_structure.md) - Структура словаря. Ключ и атрибуты, которые можно получить по ключу.
|
||||
- [lifetime](external_dicts_dict_lifetime.md) - Периодичность обновления словарей.
|
||||
- name - Идентификатор, под которым словарь будет доступен для использования. Используйте символы `[a-zA-Z0-9_\-]`.
|
||||
- [source](external_dicts_dict_sources.md) - Источник словаря.
|
||||
- [layout](external_dicts_dict_layout.md) - Размещение словаря в памяти.
|
||||
- [structure](external_dicts_dict_structure.md) - Структура словаря. Ключ и атрибуты, которые можно получить по ключу.
|
||||
- [lifetime](external_dicts_dict_lifetime.md) - Периодичность обновления словарей.
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/dicts/external_dicts_dict/) <!--hide-->
|
||||
|
@ -202,10 +202,10 @@
|
||||
|
||||
Укажите достаточно большой размер кэша. Количество ячеек следует подобрать экспериментальным путём:
|
||||
|
||||
1. Выставить некоторое значение.
|
||||
2. Запросами добиться полной заполненности кэша.
|
||||
3. Оценить потребление оперативной памяти с помощью таблицы `system.dictionaries`.
|
||||
4. Увеличивать/уменьшать количество ячеек до получения требуемого расхода оперативной памяти.
|
||||
1. Выставить некоторое значение.
|
||||
2. Запросами добиться полной заполненности кэша.
|
||||
3. Оценить потребление оперативной памяти с помощью таблицы `system.dictionaries`.
|
||||
4. Увеличивать/уменьшать количество ячеек до получения требуемого расхода оперативной памяти.
|
||||
|
||||
!!! warning
|
||||
Не используйте в качестве источника ClickHouse, поскольку он медленно обрабатывает запросы со случайным чтением.
|
||||
|
@ -144,7 +144,7 @@ hasAny(array1, array2)
|
||||
|
||||
**Возвращаемые значения**
|
||||
|
||||
- `1`, если `array1` и `array2` имеют хотя бы один одинаковый элемент.
|
||||
- `1`, если `array1` и `array2` имеют хотя бы один одинаковый элемент.
|
||||
- `0`, в противном случае.
|
||||
|
||||
**Особенности**
|
||||
@ -378,7 +378,7 @@ arrayPushFront(array, single_value)
|
||||
**Параметры**
|
||||
|
||||
- `array` - Массив.
|
||||
- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../../data_types/index.md#data_types)". Может быть равно `NULL`. Функция добавит элемент `NULL` в массив, а тип элементов массива преобразует в `Nullable`.
|
||||
- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../../data_types/index.md#data_types)". Может быть равно `NULL`. Функция добавит элемент `NULL` в массив, а тип элементов массива преобразует в `Nullable`.
|
||||
|
||||
**Пример**
|
||||
|
||||
@ -442,7 +442,7 @@ arraySlice(array, offset[, length])
|
||||
|
||||
- `array` - Массив данных.
|
||||
- `offset` - Отступ от края массива. Положительное значение - отступ слева, отрицательное значение - отступ справа. Отсчет элементов массива начинается с 1.
|
||||
- `length` - Длина необходимого среза. Если указать отрицательное значение, то функция вернёт открытый срез `[offset, array_length - length)`. Если не указать значение, то функция вернёт срез `[offset, the_end_of_array]`.
|
||||
- `length` - Длина необходимого среза. Если указать отрицательное значение, то функция вернёт открытый срез `[offset, array_length - length)`. Если не указать значение, то функция вернёт срез `[offset, the_end_of_array]`.
|
||||
|
||||
**Пример**
|
||||
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
Делаются следующие допущения:
|
||||
|
||||
1. Имя поля (аргумент функции) должно быть константой;
|
||||
2. Считается, что имя поля в JSON-е закодировано некоторым каноническим образом. Например, `visitParamHas('{"abc":"def"}', 'abc') = 1`, но `visitParamHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0`
|
||||
3. Поля ищутся на любом уровне вложенности, без разбора. Если есть несколько подходящих полей - берётся первое.
|
||||
4. В JSON-е нет пробельных символов вне строковых литералов.
|
||||
1. Имя поля (аргумент функции) должно быть константой;
|
||||
2. Считается, что имя поля в JSON-е закодировано некоторым каноническим образом. Например, `visitParamHas('{"abc":"def"}', 'abc') = 1`, но `visitParamHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0`
|
||||
3. Поля ищутся на любом уровне вложенности, без разбора. Если есть несколько подходящих полей - берётся первое.
|
||||
4. В JSON-е нет пробельных символов вне строковых литералов.
|
||||
|
||||
## visitParamHas(params, name)
|
||||
Проверить наличие поля с именем name.
|
||||
|
@ -116,7 +116,7 @@ ORDER BY h ASC
|
||||
Преобразовать значение согласно явно указанному отображению одних элементов на другие.
|
||||
Имеется два варианта функции:
|
||||
|
||||
1. `transform(x, array_from, array_to, default)`
|
||||
1. `transform(x, array_from, array_to, default)`
|
||||
|
||||
`x` - что преобразовывать.
|
||||
|
||||
@ -158,7 +158,7 @@ ORDER BY c DESC
|
||||
└───────────┴────────┘
|
||||
```
|
||||
|
||||
2. `transform(x, array_from, array_to)`
|
||||
2. `transform(x, array_from, array_to)`
|
||||
|
||||
Отличается от первого варианта отсутствующим аргументом default.
|
||||
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
|
||||
|
@ -201,9 +201,9 @@ Readonly-пользователи могут останавливать толь
|
||||
Синхронный вариант (`SYNC`) ожидает остановки всех запросов и построчно выводит информацию о процессах по ходу их остановки.
|
||||
Ответ содержит колонку `kill_status`, которая может принимать следующие значения:
|
||||
|
||||
1. 'finished' - запрос был успешно остановлен;
|
||||
2. 'waiting' - запросу отправлен сигнал завершения, ожидается его остановка;
|
||||
3. остальные значения описывают причину невозможности остановки запроса.
|
||||
1. 'finished' - запрос был успешно остановлен;
|
||||
2. 'waiting' - запросу отправлен сигнал завершения, ожидается его остановка;
|
||||
3. остальные значения описывают причину невозможности остановки запроса.
|
||||
|
||||
Тестовый вариант запроса (`TEST`) только проверяет права пользователя и выводит список запросов для остановки.
|
||||
|
||||
|
@ -434,7 +434,7 @@ LIMIT 10
|
||||
|
||||
#### Обработка NULL
|
||||
|
||||
На поведение JOIN влияет настройка [join_use_nulls](../operations/settings/settings.md). При `join_use_nulls=1` `JOIN` работает как в стандартном SQL.
|
||||
На поведение JOIN влияет настройка [join_use_nulls](../operations/settings/settings.md). При `join_use_nulls=1` `JOIN` работает как в стандартном SQL.
|
||||
|
||||
Если ключами JOIN выступают поля типа [Nullable](../data_types/nullable.md), то строки, где хотя бы один из ключей имеет значение [NULL](syntax.md), не соединяются.
|
||||
|
||||
@ -706,9 +706,9 @@ WHERE и HAVING отличаются тем, что WHERE выполняется
|
||||
|
||||
`DISTINCT` не поддерживается, если в `SELECT` присутствует хотя бы один столбец типа массив.
|
||||
|
||||
`DISTINCT` работает с [NULL](syntax.md) как если бы `NULL` был конкретным значением, причём `NULL=NULL`. Т.е. в результате `DISTINCT` разные комбинации с `NULL` встретятся только по одному разу.
|
||||
`DISTINCT` работает с [NULL](syntax.md) как если бы `NULL` был конкретным значением, причём `NULL=NULL`. Т.е. в результате `DISTINCT` разные комбинации с `NULL` встретятся только по одному разу.
|
||||
|
||||
`DISTINCT` работает с [NULL](syntax.md) как если бы `NULL` был конкретным значением, причём `NULL=NULL`. Т.е. в результате `DISTINCT` разные комбинации с `NULL` встретятся только по одному разу.
|
||||
`DISTINCT` работает с [NULL](syntax.md) как если бы `NULL` был конкретным значением, причём `NULL=NULL`. Т.е. в результате `DISTINCT` разные комбинации с `NULL` встретятся только по одному разу.
|
||||
|
||||
### Секция LIMIT
|
||||
|
||||
@ -830,7 +830,7 @@ ORDER BY EventDate ASC
|
||||
|
||||
#### Обработка NULL
|
||||
|
||||
При обработке запроса оператор IN будет считать, что результат операции с [NULL](syntax.md) всегда равен `0`, независимо от того, находится `NULL` в правой или левой части оператора. Значения `NULL` не входят ни в какое множество, не соответствуют друг другу и не могут сравниваться.
|
||||
При обработке запроса оператор IN будет считать, что результат операции с [NULL](syntax.md) всегда равен `0`, независимо от того, находится `NULL` в правой или левой части оператора. Значения `NULL` не входят ни в какое множество, не соответствуют друг другу и не могут сравниваться.
|
||||
|
||||
Рассмотрим для примера таблицу `t_null`:
|
||||
|
||||
@ -955,11 +955,11 @@ SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID GLOBAL
|
||||
|
||||
Это гораздо более оптимально, чем при использовании обычного IN. Но при этом, следует помнить о нескольких вещах:
|
||||
|
||||
1. При создании временной таблицы данные не уникализируются. Чтобы уменьшить объём передаваемых по сети данных, укажите в подзапросе DISTINCT (для обычного IN-а этого делать не нужно).
|
||||
2. Временная таблица будет передана на все удалённые серверы. Передача не учитывает топологию сети. Например, если 10 удалённых серверов расположены в удалённом относительно сервера-инициатора запроса датацентре, то по каналу в удалённый датацентр данные будет переданы 10 раз. Старайтесь не использовать большие множества при использовании GLOBAL IN.
|
||||
3. При передаче данных на удалённые серверы не настраивается ограничение использования сетевой полосы. Вы можете перегрузить сеть.
|
||||
4. Старайтесь распределять данные по серверам так, чтобы в GLOBAL IN-ах не было частой необходимости.
|
||||
5. Если в GLOBAL IN есть частая необходимость, то спланируйте размещение кластера ClickHouse таким образом, чтобы в каждом датацентре была хотя бы одна реплика каждого шарда, и среди них была быстрая сеть - чтобы запрос целиком можно было бы выполнить, передавая данные в пределах одного датацентра.
|
||||
1. При создании временной таблицы данные не уникализируются. Чтобы уменьшить объём передаваемых по сети данных, укажите в подзапросе DISTINCT (для обычного IN-а этого делать не нужно).
|
||||
2. Временная таблица будет передана на все удалённые серверы. Передача не учитывает топологию сети. Например, если 10 удалённых серверов расположены в удалённом относительно сервера-инициатора запроса датацентре, то по каналу в удалённый датацентр данные будет переданы 10 раз. Старайтесь не использовать большие множества при использовании GLOBAL IN.
|
||||
3. При передаче данных на удалённые серверы не настраивается ограничение использования сетевой полосы. Вы можете перегрузить сеть.
|
||||
4. Старайтесь распределять данные по серверам так, чтобы в GLOBAL IN-ах не было частой необходимости.
|
||||
5. Если в GLOBAL IN есть частая необходимость, то спланируйте размещение кластера ClickHouse таким образом, чтобы в каждом датацентре была хотя бы одна реплика каждого шарда, и среди них была быстрая сеть - чтобы запрос целиком можно было бы выполнить, передавая данные в пределах одного датацентра.
|
||||
|
||||
В секции `GLOBAL IN` также имеет смысл указывать локальную таблицу - в случае, если эта локальная таблица есть только на сервере-инициаторе запроса, и вы хотите воспользоваться данными из неё на удалённых серверах.
|
||||
|
||||
|
@ -48,7 +48,7 @@ SELECT
|
||||
|
||||
## 使用数据类型
|
||||
|
||||
ClickHouse会自动检测数组元素,并根据元素计算出存储这些元素最小的数据类型。如果在元素中存在[NULL](../query_language/syntax.md#null-literal)或存在[Nullable](nullable.md#data_type-nullable)类型元素,那么数组的元素类型将会变成[Nullable](nullable.md)。
|
||||
ClickHouse会自动检测数组元素,并根据元素计算出存储这些元素最小的数据类型。如果在元素中存在 [NULL](../query_language/syntax.md#null-literal) 或存在 [Nullable](nullable.md#data_type-nullable) 类型元素,那么数组的元素类型将会变成 [Nullable](nullable.md)。
|
||||
|
||||
如果 ClickHouse 无法确定数据类型,它将产生异常。当尝试同时创建一个包含字符串和数字的数组时会发生这种情况 (`SELECT array(1, 'a')`)。
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
类型与以下 C 语言中类型是相同的:
|
||||
|
||||
- `Float32` - `float`
|
||||
- `Float64` - `double`
|
||||
- `Float64` - `double`
|
||||
|
||||
我们建议您尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,例如货币数量或页面加载时间用毫秒为单位表示
|
||||
|
||||
@ -69,4 +69,4 @@ SELECT 0 / 0
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
可以在[ORDER BY 子句](../query_language/select.md) 查看更多关于 ` NaN` 排序的规则。
|
||||
可以在 [ORDER BY 子句](../query_language/select.md) 查看更多关于 ` NaN` 排序的规则。
|
||||
|
@ -261,7 +261,7 @@ void executeQuery(
|
||||
|
||||
**7.** 不要在每个文件的开头写入垃圾注释(作者,创建日期...)。
|
||||
|
||||
**8.** 单行注释用三个斜杆: `///` ,多行注释以 `/**`开始。 这些注释会当做文档。
|
||||
**8.** 单行注释用三个斜杆: `///` ,多行注释以 `/**`开始。 这些注释会当做文档。
|
||||
|
||||
注意:您可以使用 Doxygen 从这些注释中生成文档。 但是通常不使用 Doxygen,因为在 IDE 中导航代码更方便。
|
||||
|
||||
@ -349,7 +349,7 @@ class IBlockInputStream
|
||||
bool info_successfully_loaded = false;
|
||||
```
|
||||
|
||||
**9.** `define` 和全局常量的名称使用带下划线的 `ALL_CAPS`。
|
||||
**9.** `define` 和全局常量的名称使用带下划线的 `ALL_CAPS`。
|
||||
|
||||
```cpp
|
||||
#define MAX_SRC_TABLE_NAMES_TO_STORE 1000
|
||||
@ -564,7 +564,7 @@ Fork不用于并行化。
|
||||
|
||||
**12.** 数值类型。
|
||||
|
||||
使用 `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, 以及 `Int64`, `size_t`, `ssize_t` 还有 `ptrdiff_t`。
|
||||
使用 `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, 以及 `Int64`, `size_t`, `ssize_t` 还有 `ptrdiff_t`。
|
||||
|
||||
不要使用这些类型:`signed / unsigned long`,`long long`,`short`,`signed / unsigned char`,`char`。
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## 为什么不使用MapReduce之类的产品呢?
|
||||
|
||||
我们可以将MapReduce这类的系统称为分布式计算系统,其reduce操作基于分布式排序。其中最常见的开源解决方案是[Apache Hadoop](http://hadoop.apache.org)。 Yandex使用他们的内部解决方案YT。
|
||||
我们可以将MapReduce这类的系统称为分布式计算系统,其reduce操作基于分布式排序。其中最常见的开源解决方案是 [Apache Hadoop](http://hadoop.apache.org)。 Yandex使用他们的内部解决方案YT。
|
||||
|
||||
这些系统不适合在线查询,因为它们的延迟高。换句话说,它们不能用作Web接口的后端服务。这些系统对于实时数据更新是没有用的。如果操作的结果和所有中间结果(如果有的话)位于单个服务器的内存中,则分布式排序不是执行reduce操作的最佳方式,但这通常是在线查询的情况。在这种情况下,哈希表是执行reduce操作的最佳方式。优化map-reduce任务的常用方法是使用内存中的哈希表进行预聚合(部分reduce),用户手动执行此优化操作。分布式排序是运行简单map-reduce任务时性能降低的主要原因之一。
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -166,7 +166,7 @@ SELECT Origin, count(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND
|
||||
Q4. 查询2007年各航空公司延误超过10分钟以上的次数
|
||||
|
||||
```sql
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
SELECT Carrier, count(*) FROM ontime WHERE DepDelay>10 AND Year = 2007 GROUP BY Carrier ORDER BY count(*) DESC
|
||||
```
|
||||
|
||||
Q5. 查询2007年各航空公司延误超过10分钟以上的百分比
|
||||
|
@ -77,7 +77,7 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
### 命令行参数
|
||||
|
||||
- `--host, -h` -– 服务端的 host 名称, 默认是 'localhost'。 您可以选择使用 host 名称或者 IPv4 或 IPv6 地址。
|
||||
- `--host, -h` -– 服务端的 host 名称, 默认是 'localhost'。 您可以选择使用 host 名称或者 IPv4 或 IPv6 地址。
|
||||
- `--port` – 连接的端口,默认值: 9000。注意 HTTP 接口以及 TCP 原生接口是使用不同端口的。
|
||||
- `--user, -u` – 用户名。 默认值: default。
|
||||
- `--password` – 密码。 默认值: 空字符串。
|
||||
@ -93,7 +93,7 @@ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMA
|
||||
|
||||
### 配置文件
|
||||
|
||||
`clickhouse-client` 使用一下第一个存在的文件:
|
||||
`clickhouse-client` 使用一下第一个存在的文件:
|
||||
|
||||
- 通过 `-config-file` 参数指定的文件.
|
||||
- `./clickhouse-client.xml`
|
||||
|
@ -159,7 +159,7 @@ x=1 y=\N
|
||||
clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV" < data.csv
|
||||
```
|
||||
|
||||
*默认情况下间隔符是 `,` ,在[format_csv_delimiter](../operations/settings/settings.md#format_csv_delimiter)中可以了解更多间隔符配置。
|
||||
*默认情况下间隔符是 `,` ,在 [format_csv_delimiter](../operations/settings/settings.md#format_csv_delimiter) 中可以了解更多间隔符配置。
|
||||
|
||||
解析的时候,可以使用或不使用引号来解析所有值。支持双引号和单引号。行也可以不用引号排列。 在这种情况下,它们被解析为逗号或换行符(CR 或 LF)。在解析不带引号的行时,若违反 RFC 规则,会忽略前导和尾随的空格和制表符。 对于换行,全部支持 Unix(LF),Windows(CR LF)和 Mac OS Classic(CR LF)。
|
||||
|
||||
@ -256,7 +256,7 @@ JSON 与 JavaScript 兼容。为了确保这一点,一些字符被另外转义
|
||||
|
||||
该格式仅适用于输出查询结果,但不适用于解析输入(将数据插入到表中)。
|
||||
|
||||
ClickHouse 支持 [NULL](../query_language/syntax.md), 在 JSON 格式中以 `null` 输出来表示.
|
||||
ClickHouse 支持 [NULL](../query_language/syntax.md), 在 JSON 格式中以 `null` 输出来表示.
|
||||
|
||||
参考 JSONEachRow 格式。
|
||||
|
||||
@ -428,10 +428,10 @@ watch -n1 "clickhouse-client --query='SELECT event, value FROM system.events FOR
|
||||
整数使用固定长度的小端表示法。 例如,UInt64 使用8个字节。
|
||||
DateTime 被表示为 UInt32 类型的Unix 时间戳值。
|
||||
Date 被表示为 UInt16 对象,它的值为 1970-01-01以来的天数。
|
||||
字符串表示为 varint 长度(无符号[LEB128](https://en.wikipedia.org/wiki/LEB128)),后跟字符串的字节数。
|
||||
字符串表示为 varint 长度(无符号 [LEB128](https://en.wikipedia.org/wiki/LEB128)),后跟字符串的字节数。
|
||||
FixedString 被简单地表示为一个字节序列。
|
||||
|
||||
数组表示为 varint 长度(无符号[LEB128](https://en.wikipedia.org/wiki/LEB128)),后跟有序的数组元素。
|
||||
数组表示为 varint 长度(无符号 [LEB128](https://en.wikipedia.org/wiki/LEB128)),后跟有序的数组元素。
|
||||
|
||||
对于 [NULL](../query_language/syntax.md#null-literal) 的支持, 一个为 1 或 0 的字节会加在每个 [Nullable](../data_types/nullable.md) 值前面。如果为 1, 那么该值就是 `NULL`。 如果为 0,则不为 `NULL`。
|
||||
|
||||
@ -587,7 +587,7 @@ struct Message {
|
||||
}
|
||||
```
|
||||
|
||||
格式文件存储的目录可以在服务配置中的[ format_schema_path ](../operations/server_settings/settings.md) 指定。
|
||||
格式文件存储的目录可以在服务配置中的 [ format_schema_path ](../operations/server_settings/settings.md) 指定。
|
||||
|
||||
Cap'n Proto 反序列化是很高效的,通常不会增加系统的负载。
|
||||
|
||||
|
@ -10,7 +10,7 @@ $ curl 'http://localhost:8123/'
|
||||
Ok.
|
||||
```
|
||||
|
||||
通过 URL 中的 `query` 参数来发送请求,或者发送 POST 请求,或者将查询的开头部分放在 URL 的 `query` 参数中,其他部分放在 POST 中(我们会在后面解释为什么这样做是有必要的)。URL 的大小会限制在 16 KB,所以发送大型查询时要时刻记住这点。
|
||||
通过 URL 中的 `query` 参数来发送请求,或者发送 POST 请求,或者将查询的开头部分放在 URL 的 `query` 参数中,其他部分放在 POST 中(我们会在后面解释为什么这样做是有必要的)。URL 的大小会限制在 16 KB,所以发送大型查询时要时刻记住这点。
|
||||
|
||||
如果请求成功,将会收到 200 的响应状态码和响应主体中的结果。
|
||||
如果发生了某个异常,将会收到 500 的响应状态码和响应主体中的异常描述信息。
|
||||
|
@ -1,6 +1,6 @@
|
||||
# JDBC 驱动
|
||||
|
||||
- ClickHouse官方有 JDBC 的驱动。 见[这里](https://github.com/yandex/clickhouse-jdbc)。
|
||||
- ClickHouse官方有 JDBC 的驱动。 见 [这里](https://github.com/yandex/clickhouse-jdbc)。
|
||||
|
||||
- 三方提供的 JDBC 驱动 [ClickHouse-Native-JDBC](https://github.com/housepower/ClickHouse-Native-JDBC).
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ODBC 驱动
|
||||
|
||||
- ClickHouse官方有 ODBC 的驱动。 见[这里](https://github.com/yandex/clickhouse-odbc)。
|
||||
- ClickHouse官方有 ODBC 的驱动。 见 [这里](https://github.com/yandex/clickhouse-odbc)。
|
||||
|
||||
[来源文章](https://clickhouse.yandex/docs/zh/interfaces/odbc/) <!--hide-->
|
||||
|
@ -1,5 +1,5 @@
|
||||
# 原生客户端接口(TCP)
|
||||
|
||||
本机协议用于[命令行客户端](cli.md),用于分布式查询处理期间的服务器间通信,以及其他C ++程序。 不幸的是,本机ClickHouse协议还没有正式的规范,但它可以从ClickHouse源代码进行逆向工程[从这里开始](https://github.com/yandex/ClickHouse/tree/master/dbms/src/Client))和/或拦截和分析TCP流量。
|
||||
本机协议用于 [命令行客户端](cli.md),用于分布式查询处理期间的服务器间通信,以及其他C ++程序。 不幸的是,本机ClickHouse协议还没有正式的规范,但它可以从ClickHouse源代码进行逆向工程 [从这里开始](https://github.com/yandex/ClickHouse/tree/master/dbms/src/Client))和/或拦截和分析TCP流量。
|
||||
|
||||
[来源文章](https://clickhouse.yandex/docs/zh/interfaces/tcp/) <!--hide-->
|
||||
|
8
docs/zh/interfaces/third-party/gui.md
vendored
8
docs/zh/interfaces/third-party/gui.md
vendored
@ -40,7 +40,7 @@ ClickHouse Web 界面 [Tabix](https://github.com/tabixio/tabix).
|
||||
|
||||
### LightHouse
|
||||
|
||||
[LightHouse](https://github.com/VKCOM/lighthouse)是ClickHouse的轻量级Web界面。
|
||||
[LightHouse](https://github.com/VKCOM/lighthouse) 是ClickHouse的轻量级Web界面。
|
||||
|
||||
特征:
|
||||
|
||||
@ -50,7 +50,7 @@ ClickHouse Web 界面 [Tabix](https://github.com/tabixio/tabix).
|
||||
|
||||
### clickhouse-cli
|
||||
|
||||
[clickhouse-cli](https://github.com/hatarist/clickhouse-cli)是ClickHouse的替代命令行客户端,用Python 3编写。
|
||||
[clickhouse-cli](https://github.com/hatarist/clickhouse-cli) 是ClickHouse的替代命令行客户端,用Python 3编写。
|
||||
|
||||
特征:
|
||||
- 自动完成。
|
||||
@ -62,7 +62,7 @@ ClickHouse Web 界面 [Tabix](https://github.com/tabixio/tabix).
|
||||
|
||||
### DBeaver
|
||||
|
||||
[DBeaver](https://dbeaver.io/)具有ClickHouse支持的通用桌面数据库客户端。
|
||||
[DBeaver](https://dbeaver.io/) 具有ClickHouse支持的通用桌面数据库客户端。
|
||||
|
||||
特征:
|
||||
|
||||
@ -72,7 +72,7 @@ ClickHouse Web 界面 [Tabix](https://github.com/tabixio/tabix).
|
||||
|
||||
### DataGrip
|
||||
|
||||
[DataGrip](https://www.jetbrains.com/datagrip/)是JetBrains的数据库IDE,专门支持ClickHouse。 它还嵌入到其他基于IntelliJ的工具中:PyCharm,IntelliJ IDEA,GoLand,PhpStorm等。
|
||||
[DataGrip](https://www.jetbrains.com/datagrip/) 是JetBrains的数据库IDE,专门支持ClickHouse。 它还嵌入到其他基于IntelliJ的工具中:PyCharm,IntelliJ IDEA,GoLand,PhpStorm等。
|
||||
|
||||
特征:
|
||||
|
||||
|
6
docs/zh/interfaces/third-party/proxy.md
vendored
6
docs/zh/interfaces/third-party/proxy.md
vendored
@ -1,6 +1,6 @@
|
||||
# 来自第三方开发人员的代理服务器
|
||||
|
||||
[chproxy](https://github.com/Vertamedia/chproxy)是ClickHouse数据库的http代理和负载均衡器。
|
||||
[chproxy](https://github.com/Vertamedia/chproxy) 是ClickHouse数据库的http代理和负载均衡器。
|
||||
|
||||
特征
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
## KittenHouse
|
||||
|
||||
[KittenHouse](https://github.com/VKCOM/kittenhouse)设计为ClickHouse和应用程序服务器之间的本地代理,以防在应用程序端缓冲INSERT数据是不可能或不方便的。
|
||||
[KittenHouse](https://github.com/VKCOM/kittenhouse) 设计为ClickHouse和应用程序服务器之间的本地代理,以防在应用程序端缓冲INSERT数据是不可能或不方便的。
|
||||
|
||||
特征:
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
## ClickHouse-Bulk
|
||||
|
||||
[ClickHouse-Bulk](https://github.com/nikepan/clickhouse-bulk)是一个简单的ClickHouse插入收集器。
|
||||
[ClickHouse-Bulk](https://github.com/nikepan/clickhouse-bulk) 是一个简单的ClickHouse插入收集器。
|
||||
|
||||
特征:
|
||||
|
||||
|
@ -59,6 +59,6 @@ ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进
|
||||
|
||||
ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。在大多数情况下ClickHouse能在故障后自动恢复,在一些复杂的情况下需要少量的手动恢复。
|
||||
|
||||
更多信息,参见[数据复制](../operations/table_engines/replication.md)。
|
||||
更多信息,参见 [数据复制](../operations/table_engines/replication.md)。
|
||||
|
||||
[来源文章](https://clickhouse.yandex/docs/en/introduction/distinctive_features/) <!--hide-->
|
||||
|
@ -1,7 +1,7 @@
|
||||
# ClickHouse可以考虑缺点的功能
|
||||
|
||||
1. 没有完整的事物支持。
|
||||
2. 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合[GDPR](https://gdpr-info.eu)。
|
||||
2. 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 [GDPR](https://gdpr-info.eu)。
|
||||
3. 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。
|
||||
|
||||
[来源文章](https://clickhouse.yandex/docs/zh/introduction/features_considered_disadvantages/) <!--hide-->
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Performance
|
||||
|
||||
根据Yandex的内部测试结果,ClickHouse表现出了比同类可比较产品更优的性能。你可以在[这里](https://clickhouse.yandex/benchmark.html)查看具体的测试结果。
|
||||
根据Yandex的内部测试结果,ClickHouse表现出了比同类可比较产品更优的性能。你可以在 [这里](https://clickhouse.yandex/benchmark.html) 查看具体的测试结果。
|
||||
|
||||
许多其他的测试也证实这一点。你可以使用互联网搜索到它们,或者你也可以从[我们收集的部分相关连接](https://clickhouse.yandex/#independent-benchmarks)中查看。
|
||||
许多其他的测试也证实这一点。你可以使用互联网搜索到它们,或者你也可以从 [我们收集的部分相关连接](https://clickhouse.yandex/#independent-benchmarks) 中查看。
|
||||
|
||||
## 单个大查询的吞吐量
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Yandex.Metrica的使用案例
|
||||
|
||||
ClickHouse最初是为[Yandex.Metrica](https://metrica.yandex.com/)[世界第二大Web分析平台](http://w3techs.com/technologies/overview/traffic_analysis/all)而开发的。多年来一直作为该系统的核心组件被该系统持续使用着。目前为止,该系统在ClickHouse中有超过13万亿条记录,并且每天超过200多亿个事件被处理。它允许直接从原始数据中动态查询并生成报告。本文简要介绍了ClickHouse在其早期发展阶段的目标。
|
||||
ClickHouse最初是为 [Yandex.Metrica](https://metrica.yandex.com/) [世界第二大Web分析平台](http://w3techs.com/technologies/overview/traffic_analysis/all) 而开发的。多年来一直作为该系统的核心组件被该系统持续使用着。目前为止,该系统在ClickHouse中有超过13万亿条记录,并且每天超过200多亿个事件被处理。它允许直接从原始数据中动态查询并生成报告。本文简要介绍了ClickHouse在其早期发展阶段的目标。
|
||||
|
||||
Yandex.Metrica基于用户定义的字段,对实时访问、连接会话,生成实时的统计报表。这种需求往往需要复杂聚合方式,比如对访问用户进行去重。构建报表的数据,是实时接收存储的新数据。
|
||||
|
||||
|
@ -12,7 +12,7 @@ If `replace` is specified, it replaces the entire element with the specified one
|
||||
|
||||
If `remove` is specified, it deletes the element.
|
||||
|
||||
The config can also define "substitutions". If an element has the `incl` attribute, the corresponding substitution from the file will be used as the value. By default, the path to the file with substitutions is `/etc/metrika.xml`. This can be changed in the [include_from](server_settings/settings.md#server_settings-include_from) element in the server config. The substitution values are specified in `/yandex/substitution_name` elements in this file. If a substitution specified in `incl` does not exist, it is recorded in the log. To prevent ClickHouse from logging missing substitutions, specify the `optional="true"` attribute (for example, settings for [macros](#macros) server_settings/settings.md)).
|
||||
The config can also define "substitutions". If an element has the `incl` attribute, the corresponding substitution from the file will be used as the value. By default, the path to the file with substitutions is `/etc/metrika.xml`. This can be changed in the [include_from](server_settings/settings.md#server_settings-include_from) element in the server config. The substitution values are specified in `/yandex/substitution_name` elements in this file. If a substitution specified in `incl` does not exist, it is recorded in the log. To prevent ClickHouse from logging missing substitutions, specify the `optional="true"` attribute (for example, settings for [macros](#macros) server_settings/settings.md)).
|
||||
|
||||
Substitutions can also be performed from ZooKeeper. To do this, specify the attribute `from_zk = "/path/to/node"`. The element value is replaced with the contents of the node at `/path/to/node` in ZooKeeper. You can also put an entire XML subtree on the ZooKeeper node and it will be fully inserted into the source element.
|
||||
|
||||
|
@ -42,7 +42,7 @@ Block field `<case>`:
|
||||
- ``min_part_size_ratio`` – The ratio of the minimum size of a table part to the full size of the table.
|
||||
- ``method`` – Compression method. Acceptable values : ``lz4`` or ``zstd``(experimental).
|
||||
|
||||
ClickHouse checks `min_part_size` and `min_part_size_ratio` and processes the `case` blocks that match these conditions. If none of the `<case>` matches, ClickHouse applies the `lz4` compression algorithm.
|
||||
ClickHouse checks `min_part_size` and `min_part_size_ratio` and processes the `case` blocks that match these conditions. If none of the `<case>` matches, ClickHouse applies the `lz4` compression algorithm.
|
||||
|
||||
**Example**
|
||||
|
||||
@ -456,7 +456,7 @@ Keys for server/client settings:
|
||||
- requireTLSv1 – Require a TLSv1.2 connection. Acceptable values: `true`, `false`.
|
||||
- fips – Activates OpenSSL FIPS mode. Supported if the library's OpenSSL version supports FIPS.
|
||||
- privateKeyPassphraseHandler – Class (PrivateKeyPassphraseHandler subclass) that requests the passphrase for accessing the private key. For example: ``<privateKeyPassphraseHandler>``, ``<name>KeyFileHandler</name>``, ``<options><password>test</password></options>``, ``</privateKeyPassphraseHandler>``.
|
||||
- invalidCertificateHandler – Class (subclass of CertificateHandler) for verifying invalid certificates. For example: `` <invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>`` .
|
||||
- invalidCertificateHandler – Class (subclass of CertificateHandler) for verifying invalid certificates. For example: `` <invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>`` .
|
||||
- disableProtocols – Protocols that are not allowed to use.
|
||||
- preferServerCiphers – Preferred server ciphers on the client.
|
||||
|
||||
@ -640,7 +640,7 @@ The uncompressed cache is advantageous for very short queries in individual case
|
||||
|
||||
## user_files_path {#server_settings-user_files_path}
|
||||
|
||||
The directory with user files. Used in the table function [file()](../../query_language/table_functions/file.md).
|
||||
The directory with user files. Used in the table function [file()](../../query_language/table_functions/file.md).
|
||||
|
||||
**Example**
|
||||
|
||||
|
@ -28,7 +28,7 @@ Forces a query to an out-of-date replica if updated data is not available. See "
|
||||
|
||||
ClickHouse selects the most relevant from the outdated replicas of the table.
|
||||
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
|
||||
By default, 1 (enabled).
|
||||
|
||||
@ -38,7 +38,7 @@ Disables query execution if the index can't be used by date.
|
||||
|
||||
Works with tables in the MergeTree family.
|
||||
|
||||
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 actually 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](../../operations/table_engines/mergetree.md)".
|
||||
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 actually 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](../../operations/table_engines/mergetree.md)".
|
||||
|
||||
|
||||
## force_primary_key
|
||||
@ -47,7 +47,7 @@ Disables query execution if indexing by the primary key is not possible.
|
||||
|
||||
Works with tables in the MergeTree family.
|
||||
|
||||
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 actually reduces the amount of data to read. For more information about data ranges in MergeTree tables, see "[MergeTree](../../operations/table_engines/mergetree.md)".
|
||||
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 actually reduces the amount of data to read. For more information about data ranges in MergeTree tables, see "[MergeTree](../../operations/table_engines/mergetree.md)".
|
||||
|
||||
|
||||
## fsync_metadata
|
||||
@ -126,7 +126,7 @@ Sets the time in seconds. If a replica lags more than the set value, this replic
|
||||
|
||||
Default value: 0 (off).
|
||||
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
Used when performing `SELECT` from a distributed table that points to replicated tables.
|
||||
|
||||
## max_threads {#settings-max_threads}
|
||||
|
||||
@ -311,7 +311,7 @@ Replica lag is not controlled.
|
||||
Enable compilation of queries. By default, 0 (disabled).
|
||||
|
||||
Compilation is only used for part of the query-processing pipeline: for the first stage of aggregation (GROUP BY).
|
||||
If this portion of the pipeline was compiled, the query may run faster due to 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.
|
||||
If this portion of the pipeline was compiled, the query may run faster due to 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.
|
||||
|
||||
## min_count_to_compile
|
||||
|
||||
@ -329,7 +329,7 @@ It works for JSONEachRow and TSKV formats.
|
||||
|
||||
## output_format_json_quote_64bit_integers
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
## format_csv_delimiter {#format_csv_delimiter}
|
||||
|
||||
@ -358,7 +358,7 @@ The default value is 0.
|
||||
|
||||
All the replicas in the quorum are consistent, i.e., they contain data from all previous `INSERT` queries. The `INSERT` sequence is linearized.
|
||||
|
||||
When reading the data written from the `insert_quorum`, you can use the[select_sequential_consistency](#select-sequential-consistency) option.
|
||||
When reading the data written from the `insert_quorum`, you can use the [select_sequential_consistency](#select-sequential-consistency) option.
|
||||
|
||||
**ClickHouse generates an exception**
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user