mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Merge branch 'master' into formats_improvements
This commit is contained in:
commit
c4b46e113e
@ -1,5 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wreserved-id-macro"
|
||||
#endif
|
||||
|
||||
#define __msan_unpoison(X, Y)
|
||||
#define __msan_test_shadow(X, Y) (false)
|
||||
#define __msan_print_shadow(X, Y)
|
||||
@ -11,3 +16,7 @@
|
||||
# include <sanitizer/msan_interface.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
@ -54,6 +54,11 @@
|
||||
<value>toYYYYMM</value>
|
||||
<value>toYYYYMMDD</value>
|
||||
<value>toYYYYMMDDhhmmss</value>
|
||||
|
||||
<value>timeSlot</value>
|
||||
<value>toRelativeQuarterNum</value>
|
||||
<value>toStartOfTenMinutes</value>
|
||||
<value>toUnixTimestamp</value>
|
||||
</values>
|
||||
</substitution>
|
||||
<substitution>
|
||||
@ -70,6 +75,7 @@
|
||||
|
||||
<value>toDate</value>
|
||||
<value>toMonday</value>
|
||||
<value>toStartOfDay</value>
|
||||
<value>toStartOfMonth</value>
|
||||
<value>toStartOfQuarter</value>
|
||||
<value>toStartOfYear</value>
|
||||
@ -83,18 +89,55 @@
|
||||
<value>toYYYYMM</value>
|
||||
<value>toYYYYMMDD</value>
|
||||
<value>toYYYYMMDDhhmmss</value>
|
||||
|
||||
<value>toRelativeQuarterNum</value>
|
||||
<value>toUnixTimestamp</value>
|
||||
</values>
|
||||
</substitution>
|
||||
<substitution>
|
||||
<name>time_zone</name>
|
||||
<values>
|
||||
</substitution>
|
||||
<substitution>
|
||||
<name>time_zone</name>
|
||||
<values>
|
||||
<value>UTC</value>
|
||||
<value>Europe/Moscow</value>
|
||||
<value>Asia/Kolkata</value>
|
||||
</values>
|
||||
</substitution>
|
||||
</values>
|
||||
</substitution>
|
||||
<substitution>
|
||||
<name>binary_function</name>
|
||||
<values>
|
||||
<value>lessOrEquals</value>
|
||||
<value>less</value>
|
||||
<value>greater</value>
|
||||
<value>greaterOrEquals</value>
|
||||
<value>equals</value>
|
||||
<value>notEquals</value>
|
||||
<value>plus</value>
|
||||
<value>minus</value>
|
||||
<value>addDays</value>
|
||||
<value>addHours</value>
|
||||
<value>addMinutes</value>
|
||||
<value>addMonths</value>
|
||||
<value>addQuarters</value>
|
||||
<value>addSeconds</value>
|
||||
<value>addWeeks</value>
|
||||
<value>addYears</value>
|
||||
<value>subtractDays</value>
|
||||
<value>subtractHours</value>
|
||||
<value>subtractMinutes</value>
|
||||
<value>subtractMonths</value>
|
||||
<value>subtractQuarters</value>
|
||||
<value>subtractSeconds</value>
|
||||
<value>subtractWeeks</value>
|
||||
<value>subtractYears</value>
|
||||
</values>
|
||||
</substitution>
|
||||
</substitutions>
|
||||
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {datetime_transform}(t, '{time_zone}'))</query>
|
||||
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toDate('2017-01-01') + number % 1000 + rand() % 10 AS t, {date_transform}(t))</query>
|
||||
</test>
|
||||
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {binary_function}(t, 1))</query>
|
||||
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, toStartOfInterval(t, INTERVAL 1 month))</query>
|
||||
</test>
|
25
docs/.yaspellerrc
Normal file
25
docs/.yaspellerrc
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"checkYo": false,
|
||||
"excludeFiles": [],
|
||||
"fileExtensions": [],
|
||||
"format": "auto",
|
||||
"ignoreTags": [
|
||||
"code",
|
||||
"kbd",
|
||||
"object",
|
||||
"samp",
|
||||
"script",
|
||||
"style",
|
||||
"var"
|
||||
],
|
||||
"maxRequests": 2,
|
||||
"lang": "en,ru",
|
||||
"report": ["console"],
|
||||
"dictionary": [
|
||||
"(C|c)lick(H|h)ouse",
|
||||
"CatBoost",
|
||||
"(Ш|ш)ард(ы|ов|а|у|е|ам|ирование|ированы|ах)?",
|
||||
"логир(ование|уются|ования)?",
|
||||
"конфиг(а|е|ом|у)"
|
||||
]
|
||||
}
|
230
docs/en/guides/apply_catboost_model.md
Normal file
230
docs/en/guides/apply_catboost_model.md
Normal file
@ -0,0 +1,230 @@
|
||||
# Applying a Catboost Model in ClickHouse {#applying-catboost-model-in-clickhouse}
|
||||
|
||||
[CatBoost](https://catboost.ai) is a free and open-source gradient boosting library developed at [Yandex](https://yandex.com/company/) for machine learning.
|
||||
|
||||
With this instruction, you will learn to apply pre-trained models in ClickHouse: as a result, you run the model inference from SQL.
|
||||
|
||||
To apply a CatBoost model in ClickHouse:
|
||||
|
||||
1. [Create a Table](#create-table).
|
||||
2. [Insert the Data to the Table](#insert-data-to-table).
|
||||
3. [Integrate CatBoost into ClickHouse](#integrate-catboost-into-clickhouse) (Optional step).
|
||||
4. [Run the Model Inference from SQL](#run-model-inference).
|
||||
|
||||
For more information about training CatBoost models, see [Training and applying models](https://catboost.ai/docs/features/training.html#training).
|
||||
|
||||
## Prerequisites {#prerequisites}
|
||||
|
||||
If you don't have the [Docker](https://docs.docker.com/install/) yet, install it.
|
||||
|
||||
!!! note "Note"
|
||||
[Docker](https://www.docker.com) is a software platform that allows you to create containers that isolate a CatBoost and ClickHouse installation from the rest of the system.
|
||||
|
||||
Before applying a CatBoost model:
|
||||
|
||||
**1.** Pull the [Docker image](https://hub.docker.com/r/yandex/tutorial-catboost-clickhouse) from the registry:
|
||||
|
||||
```bash
|
||||
$ docker pull yandex/tutorial-catboost-clickhouse
|
||||
```
|
||||
|
||||
This Docker image contains everything you need to run CatBoost and ClickHouse: code, runtime, libraries, environment variables, and configuration files.
|
||||
|
||||
**2.** Make sure the Docker image has been successfully pulled:
|
||||
|
||||
```bash
|
||||
$ docker image ls
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
yandex/tutorial-catboost-clickhouse latest 622e4d17945b 22 hours ago 1.37GB
|
||||
```
|
||||
|
||||
**3.** Start a Docker container based on this image:
|
||||
|
||||
```bash
|
||||
$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse
|
||||
```
|
||||
|
||||
## 1. Create a Table {#create-table}
|
||||
|
||||
To create a ClickHouse table for the train sample:
|
||||
|
||||
**1.** Start ClickHouse console client in interactive mode:
|
||||
|
||||
```bash
|
||||
$ clickhouse client
|
||||
```
|
||||
|
||||
!!! note "Note"
|
||||
The ClickHouse server is already running inside the Docker container.
|
||||
|
||||
**2.** Create the table using the command:
|
||||
|
||||
```sql
|
||||
:) CREATE TABLE amazon_train
|
||||
(
|
||||
date Date MATERIALIZED today(),
|
||||
ACTION UInt8,
|
||||
RESOURCE UInt32,
|
||||
MGR_ID UInt32,
|
||||
ROLE_ROLLUP_1 UInt32,
|
||||
ROLE_ROLLUP_2 UInt32,
|
||||
ROLE_DEPTNAME UInt32,
|
||||
ROLE_TITLE UInt32,
|
||||
ROLE_FAMILY_DESC UInt32,
|
||||
ROLE_FAMILY UInt32,
|
||||
ROLE_CODE UInt32
|
||||
)
|
||||
ENGINE = MergeTree()
|
||||
```
|
||||
|
||||
**3.** Exit from ClickHouse console client:
|
||||
|
||||
```sql
|
||||
:) exit
|
||||
```
|
||||
|
||||
## 2. Insert the Data to the Table {#insert-data-to-table}
|
||||
|
||||
To insert the data:
|
||||
|
||||
**1.** Run the following command:
|
||||
|
||||
```bash
|
||||
$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv
|
||||
```
|
||||
|
||||
**2.** Start ClickHouse console client in interactive mode:
|
||||
|
||||
```bash
|
||||
$ clickhouse client
|
||||
```
|
||||
|
||||
**3.** Make sure the data has been uploaded:
|
||||
|
||||
```sql
|
||||
:) SELECT count() FROM amazon_train
|
||||
|
||||
SELECT count()
|
||||
FROM amazon_train
|
||||
|
||||
+-count()-+
|
||||
| 65538 |
|
||||
+---------+
|
||||
```
|
||||
|
||||
## 3. Integrate CatBoost into ClickHouse {#integrate-catboost-into-clickhouse}
|
||||
|
||||
!!! note "Note"
|
||||
**Optional step.** The Docker image contains everything you need to run CatBoost and ClickHouse.
|
||||
|
||||
To integrate CatBoost into ClickHouse:
|
||||
|
||||
**1.** Build the evaluation library.
|
||||
|
||||
The fastest way to evaluate a CatBoost model is compile `libcatboostmodel.<so|dll|dylib>` library. For more information about how to build the library, see [CatBoost documentation](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html).
|
||||
|
||||
**2.** Create a new directory anywhere and with any name, for example, `data` and put the created library in it. The Docker image already contains the library `data/libcatboostmodel.so`.
|
||||
|
||||
**3.** Create a new directory for config model anywhere and with any name, for example, `models`.
|
||||
|
||||
**4.** Create a model configuration file with any name, for example, `models/amazon_model.xml`.
|
||||
|
||||
**5.** Describe the model configuration:
|
||||
|
||||
```xml
|
||||
<models>
|
||||
<model>
|
||||
<!-- Model type. Now catboost only. -->
|
||||
<type>catboost</type>
|
||||
<!-- Model name. -->
|
||||
<name>amazon</name>
|
||||
<!-- Path to trained model. -->
|
||||
<path>/home/catboost/tutorial/catboost_model.bin</path>
|
||||
<!-- Update interval. -->
|
||||
<lifetime>0</lifetime>
|
||||
</model>
|
||||
</models>
|
||||
```
|
||||
|
||||
**6.** Add the path to CatBoost and the model configuration to the ClickHouse configuration:
|
||||
|
||||
```xml
|
||||
<!-- File etc/clickhouse-server/config.d/models_config.xml. -->
|
||||
<catboost_dynamic_library_path>/home/catboost/data/libcatboostmodel.so</catboost_dynamic_library_path>
|
||||
<models_config>/home/catboost/models/*_model.xml</models_config>
|
||||
```
|
||||
|
||||
## 4. Run the Model Inference from SQL {#run-model-inference}
|
||||
|
||||
For test model run the ClickHouse client `$ clickhouse client`.
|
||||
|
||||
Let's make sure that the model is working:
|
||||
|
||||
```sql
|
||||
:) SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) > 0 AS prediction,
|
||||
ACTION AS target
|
||||
FROM amazon_train
|
||||
LIMIT 10
|
||||
```
|
||||
|
||||
!!! note "Note"
|
||||
Function [modelEvaluate](../query_language/functions/other_functions.md#function-modelevaluate) returns tuple with per-class raw predictions for multiclass models.
|
||||
|
||||
Let's predict probability:
|
||||
|
||||
```sql
|
||||
:) SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) AS prediction,
|
||||
1. / (1 + exp(-prediction)) AS probability,
|
||||
ACTION AS target
|
||||
FROM amazon_train
|
||||
LIMIT 10
|
||||
```
|
||||
|
||||
!!! note "Note"
|
||||
More info about [exp()](../query_language/functions/math_functions.md) function.
|
||||
|
||||
Let's calculate LogLoss on the sample:
|
||||
|
||||
```sql
|
||||
:) SELECT -avg(tg * log(prob) + (1 - tg) * log(1 - prob)) AS logloss
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) AS prediction,
|
||||
1. / (1. + exp(-prediction)) AS prob,
|
||||
ACTION AS tg
|
||||
FROM amazon_train
|
||||
)
|
||||
```
|
||||
|
||||
!!! note "Note"
|
||||
More info about [avg()](../query_language/agg_functions/reference.md#agg_function-avg) and [log()](../query_language/functions/math_functions.md) functions.
|
5
docs/en/guides/index.md
Normal file
5
docs/en/guides/index.md
Normal file
@ -0,0 +1,5 @@
|
||||
# ClickHouse Guides
|
||||
|
||||
Detailed step-by-step instructions that will help you solve various tasks using ClickHouse.
|
||||
|
||||
- [Applying a CatBoost Model in ClickHouse](apply_catboost_model.md)
|
@ -1,6 +1,6 @@
|
||||
# MergeTree {#table_engines-mergetree}
|
||||
|
||||
The `MergeTree` engine and other engines of this family (`*MergeTree`) are the most robust ClickHousе table engines.
|
||||
The `MergeTree` engine and other engines of this family (`*MergeTree`) are the most robust ClickHouse table engines.
|
||||
|
||||
Engines in the `MergeTree` family are designed for inserting a very large amount of data into a table. The data is quickly written to the table part by part, then rules are applied for merging the parts in the background. This method is much more efficient than continually rewriting the data in storage during insert.
|
||||
|
||||
|
@ -768,8 +768,8 @@ Gets data from [Join](../../operations/table_engines/join.md) tables using the s
|
||||
|
||||
Only supports tables created with the `ENGINE = Join(ANY, LEFT, <join_keys>)` statement.
|
||||
|
||||
## modelEvaluate(model_name, ...)
|
||||
Evaluate model.
|
||||
## modelEvaluate(model_name, ...) {#function-modelevaluate}
|
||||
Evaluate external model.
|
||||
Accepts a model name and model arguments. Returns Float64.
|
||||
|
||||
## throwIf(x\[, custom_message\])
|
||||
|
@ -42,7 +42,7 @@
|
||||
|
||||
При операциях между Decimal и целыми числами результатом является Decimal, аналогичный аргументу.
|
||||
|
||||
Операции между Decimal и Float32/64 не определены. Для осуществления таких операций нужно явно привести один из агруметнов функциями: toDecimal32, toDecimal64, toDecimal128, или toFloat32, toFloat64. Это сделано из двух соображений. Во-первых, результат операции будет с потерей точности. Во-вторых, преобразование типа - дорогая операция, из-за ее наличия пользовательский запрос может работать в несколько раз дольше.
|
||||
Операции между Decimal и Float32/64 не определены. Для осуществления таких операций нужно явно привести один из аргументов функциями: toDecimal32, toDecimal64, toDecimal128, или toFloat32, toFloat64. Это сделано из двух соображений. Во-первых, результат операции будет с потерей точности. Во-вторых, преобразование типа - дорогая операция, из-за ее наличия пользовательский запрос может работать в несколько раз дольше.
|
||||
|
||||
Часть функций над Decimal возвращают Float64 (например, var, stddev). Для некоторых из них промежуточные операции проходят в Decimal.
|
||||
Для таких функций результат над одинаковыми данными во Float64 и Decimal может отличаться, несмотря на одинаковый тип результата.
|
||||
|
@ -7,7 +7,7 @@
|
||||
- `Float32` - `float`;
|
||||
- `Float64` - `double`.
|
||||
|
||||
Рекомендуется хранить данные в целочисленноми виде всегда, когда это возможно. Например, переводите в целочисленные значения числа с фиксированной точностью, такие как денежные суммы или времена загрузки страниц в миллисекундах.
|
||||
Рекомендуется хранить данные в целочисленном виде всегда, когда это возможно. Например, переводите в целочисленные значения числа с фиксированной точностью, такие как денежные суммы или времена загрузки страниц в миллисекундах.
|
||||
|
||||
## Особенности использования чисел с плавающей запятой
|
||||
|
||||
|
@ -90,7 +90,7 @@ LIMIT 10
|
||||
|
||||
Вы не можете сделать SELECT целой вложенной структуры данных. Можно лишь явно перечислить отдельные столбцы - её составляющие.
|
||||
|
||||
При запросе INSERT, вы должны передать все составляющие столбцы-массивы вложенной структуры данных по-отдельности (как если бы это были отдельные столбцы-массивы). При вставке проверяется, что они имеют одинаковые длины.
|
||||
При запросе INSERT, вы должны передать все составляющие столбцы-массивы вложенной структуры данных по отдельности (как если бы это были отдельные столбцы-массивы). При вставке проверяется, что они имеют одинаковые длины.
|
||||
|
||||
При запросе DESCRIBE, столбцы вложенной структуры данных перечисляются так же по отдельности.
|
||||
|
||||
|
@ -263,7 +263,7 @@ void executeQuery(
|
||||
|
||||
**8.** Однострочные комментарии начинаются с трёх слешей: `///` , многострочные с `/**`. Такие комментарии считаются «документирующими».
|
||||
|
||||
Замечание: такие комментарии могут использоваться для генерации документации с помощью Doxygen. Но, фактически, Doxygen не используется, так как для навигации по коду гораздо удобне использовать возможности IDE.
|
||||
Замечание: такие комментарии могут использоваться для генерации документации с помощью Doxygen. Но, фактически, Doxygen не используется, так как для навигации по коду гораздо удобнее использовать возможности IDE.
|
||||
|
||||
**9.** В начале и конце многострочного комментария, не должно быть пустых строк (кроме строки, на которой закрывается многострочный комментарий).
|
||||
|
||||
@ -399,7 +399,7 @@ enum class CompressionMethod
|
||||
};
|
||||
```
|
||||
|
||||
**15.** Все имена - по английски. Транслит с русского использовать нельзя.
|
||||
**15.** Все имена - по-английски. Транслит с русского использовать нельзя.
|
||||
|
||||
```text
|
||||
не Stroka
|
||||
@ -505,7 +505,7 @@ if (0 != close(fd))
|
||||
- Сделайте функцию (`done()` или `finalize()`), которая позволяет заранее выполнить всю работу, в процессе которой может возникнуть исключение. Если эта функция была вызвана, то затем в деструкторе не должно возникать исключений.
|
||||
- Слишком сложную работу (например, отправку данных по сети) можно вообще не делать в деструкторе, рассчитывая, что пользователь заранее позовёт метод для завершения работы.
|
||||
- Если в деструкторе возникло исключение, желательно не "проглатывать" его, а вывести информацию в лог (если в этом месте доступен логгер).
|
||||
- В простых программах, если соответствующие исключения не ловятся, и приводят к завершению работы с записью информации в лог, можно не беспокоиться об исключениях, вылетающих из деструкторов, так как вызов `std::terminate` (в случае `noexcept` по умолчанию в C++11), является приемлимым способом обработки исключения.
|
||||
- В простых программах, если соответствующие исключения не ловятся, и приводят к завершению работы с записью информации в лог, можно не беспокоиться об исключениях, вылетающих из деструкторов, так как вызов `std::terminate` (в случае `noexcept` по умолчанию в C++11), является приемлемым способом обработки исключения.
|
||||
|
||||
**6.** Отдельные блоки кода.
|
||||
|
||||
@ -630,17 +630,17 @@ Loader() {}
|
||||
|
||||
Везде используется UTF-8. Используется `std::string`, `char *`. Не используется `std::wstring`, `wchar_t`.
|
||||
|
||||
**19.** Логгирование.
|
||||
**19.** Логирование.
|
||||
|
||||
См. примеры везде в коде.
|
||||
|
||||
Перед коммитом, удалите всё бессмысленное и отладочное логгирование, и другие виды отладочного вывода.
|
||||
Перед коммитом, удалите всё бессмысленное и отладочное логирование, и другие виды отладочного вывода.
|
||||
|
||||
Не должно быть логгирования на каждую итерацию внутреннего цикла, даже уровня Trace.
|
||||
Не должно быть логирования на каждую итерацию внутреннего цикла, даже уровня Trace.
|
||||
|
||||
При любом уровне логгирования, логи должно быть возможно читать.
|
||||
При любом уровне логирования, логи должно быть возможно читать.
|
||||
|
||||
Логгирование следует использовать, в основном, только в прикладном коде.
|
||||
Логирование следует использовать, в основном, только в прикладном коде.
|
||||
|
||||
Сообщения в логе должны быть написаны на английском языке.
|
||||
|
||||
|
@ -373,7 +373,7 @@ Q3: 0.051 sec.
|
||||
Q4: 0.072 sec.
|
||||
|
||||
В этом случае, время выполнения запросов определяется в первую очередь сетевыми задержками.
|
||||
Мы выполняли запросы с помощью клиента, расположенного в датацентре Яндекса в Мянтсяля (Финляндия), на кластер в России, что добавляет порядка 20 мс задержки.
|
||||
Мы выполняли запросы с помощью клиента, расположенного в дата-центре Яндекса в Мянтсяля (Финляндия), на кластер в России, что добавляет порядка 20 мс задержки.
|
||||
|
||||
## Резюме
|
||||
|
||||
|
@ -61,11 +61,11 @@ $ sudo yum install clickhouse-server clickhouse-client
|
||||
|
||||
Для запуска ClickHouse в Docker нужно следовать инструкции на [Docker Hub](https://hub.docker.com/r/yandex/clickhouse-server/). Внутри образов используются официальные `deb` пакеты.
|
||||
|
||||
### Из исходникого кода
|
||||
### Из исходного кода
|
||||
|
||||
Для компиляции ClickHouse вручную, используйте инструкцию для [Linux](../development/build.md) или [Mac OS X](../development/build_osx.md).
|
||||
|
||||
Можно скомпилировать пакеты и установить их, либо использовать программы без установки пакетов. Также при ручой сборке можно отключить необходимость поддержки набора инструкций SSE 4.2 или собрать под процессоры архитектуры AArch64.
|
||||
Можно скомпилировать пакеты и установить их, либо использовать программы без установки пакетов. Также при ручной сборке можно отключить необходимость поддержки набора инструкций SSE 4.2 или собрать под процессоры архитектуры AArch64.
|
||||
|
||||
```text
|
||||
Client: dbms/programs/clickhouse-client
|
||||
|
230
docs/ru/guides/apply_catboost_model.md
Normal file
230
docs/ru/guides/apply_catboost_model.md
Normal file
@ -0,0 +1,230 @@
|
||||
# Применение модели CatBoost в ClickHouse {#applying-catboost-model-in-clickhouse}
|
||||
|
||||
[CatBoost](https://catboost.ai) — открытая программная библиотека разработанная компанией [Яндекс](https://yandex.ru/company/) для машинного обучения, которая использует схему градиентного бустинга.
|
||||
|
||||
С помощью этой инструкции вы научитесь применять предобученные модели в ClickHouse: в результате вы запустите вывод модели из SQL.
|
||||
|
||||
Чтобы применить модель CatBoost в ClickHouse:
|
||||
|
||||
1. [Создайте таблицу](#create-table).
|
||||
2. [Вставьте данные в таблицу](#insert-data-to-table).
|
||||
3. [Интегрируйте CatBoost в ClickHouse](#integrate-catboost-into-clickhouse) (Опциональный шаг).
|
||||
4. [Запустите вывод модели из SQL](#run-model-inference).
|
||||
|
||||
Подробнее об обучении моделей в CatBoost, см. [Обучение и применение моделей](https://catboost.ai/docs/features/training.html#training).
|
||||
|
||||
## Перед началом работы {#prerequisites}
|
||||
|
||||
Если у вас еще нет [Docker](https://docs.docker.com/install/), установите его.
|
||||
|
||||
!!! note "Примечание"
|
||||
[Docker](https://www.docker.com) – это программная платформа для создания контейнеров, которые изолируют установку CatBoost и ClickHouse от остальной части системы.
|
||||
|
||||
Перед применением модели CatBoost:
|
||||
|
||||
**1.** Скачайте [Docker-образ](https://hub.docker.com/r/yandex/tutorial-catboost-clickhouse) из реестра:
|
||||
|
||||
```bash
|
||||
$ docker pull yandex/tutorial-catboost-clickhouse
|
||||
```
|
||||
|
||||
Данный Docker-образ содержит все необходимое для запуска CatBoost и ClickHouse: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации.
|
||||
|
||||
**2.** Проверьте, что Docker-образ успешно скачался:
|
||||
|
||||
```bash
|
||||
$ docker image ls
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
yandex/tutorial-catboost-clickhouse latest 622e4d17945b 22 hours ago 1.37GB
|
||||
```
|
||||
|
||||
**3.** Запустите Docker-контейнер основанный на данном образе:
|
||||
|
||||
```bash
|
||||
$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse
|
||||
```
|
||||
|
||||
## 1. Создайте таблицу {#create-table}
|
||||
|
||||
Чтобы создать таблицу для обучающей выборки:
|
||||
|
||||
**1.** Запустите клиент ClickHouse:
|
||||
|
||||
```bash
|
||||
$ clickhouse client
|
||||
```
|
||||
|
||||
!!! note "Примечание"
|
||||
Сервер ClickHouse уже запущен внутри Docker-контейнера.
|
||||
|
||||
**2.** Создайте таблицу в ClickHouse с помощью следующей команды:
|
||||
|
||||
```sql
|
||||
:) CREATE TABLE amazon_train
|
||||
(
|
||||
date Date MATERIALIZED today(),
|
||||
ACTION UInt8,
|
||||
RESOURCE UInt32,
|
||||
MGR_ID UInt32,
|
||||
ROLE_ROLLUP_1 UInt32,
|
||||
ROLE_ROLLUP_2 UInt32,
|
||||
ROLE_DEPTNAME UInt32,
|
||||
ROLE_TITLE UInt32,
|
||||
ROLE_FAMILY_DESC UInt32,
|
||||
ROLE_FAMILY UInt32,
|
||||
ROLE_CODE UInt32
|
||||
)
|
||||
ENGINE = MergeTree()
|
||||
```
|
||||
|
||||
**3.** Выйдите из клиента ClickHouse:
|
||||
|
||||
```sql
|
||||
:) exit
|
||||
```
|
||||
|
||||
## 2. Вставьте данные в таблицу {#insert-data-to-table}
|
||||
|
||||
Чтобы вставить данные:
|
||||
|
||||
**1.** Выполните следующую команду:
|
||||
|
||||
```bash
|
||||
$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv
|
||||
```
|
||||
|
||||
**2.** Запустите клиент ClickHouse:
|
||||
|
||||
```bash
|
||||
$ clickhouse client
|
||||
```
|
||||
|
||||
**3.** Проверьте, что данные успешно загрузились:
|
||||
|
||||
```sql
|
||||
:) SELECT count() FROM amazon_train
|
||||
|
||||
SELECT count()
|
||||
FROM amazon_train
|
||||
|
||||
+-count()-+
|
||||
| 65538 |
|
||||
+---------+
|
||||
```
|
||||
|
||||
## 3. Интегрируйте CatBoost в ClickHouse {#integrate-catboost-into-clickhouse}
|
||||
|
||||
!!! note "Примечание"
|
||||
**Опциональный шаг.** Docker-образ содержит все необходимое для запуска CatBoost и ClickHouse.
|
||||
|
||||
Чтобы интегрировать CatBoost в ClickHouse:
|
||||
|
||||
**1.** Создайте библиотеку для оценки модели.
|
||||
|
||||
Наиболее быстрый способ оценить модель CatBoost — это скомпилировать библиотеку `libcatboostmodel.<so|dll|dylib>`. Подробнее о том, как скомпилировать библиотеку, читайте в [документации CatBoost](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html).
|
||||
|
||||
**2.** Создайте в любом месте новую директорию с произвольным названием, например `data` и поместите в нее созданную библиотеку. Docker-образ уже содержит библиотеку `data/libcatboostmodel.so`.
|
||||
|
||||
**3.** Создайте в любом месте новую директорию для конфигурации модели с произвольным названием, например `models`.
|
||||
|
||||
**4.** Создайте файл конфигурации модели с произвольным названием, например `models/amazon_model.xml`.
|
||||
|
||||
**5.** Опишите конфигурацию модели:
|
||||
|
||||
```xml
|
||||
<models>
|
||||
<model>
|
||||
<!-- Тип модели. В настоящий момент ClickHouse предоставляет только модель catboost. -->
|
||||
<type>catboost</type>
|
||||
<!-- Имя модели. -->
|
||||
<name>amazon</name>
|
||||
<!-- Путь к обученной модели. -->
|
||||
<path>/home/catboost/tutorial/catboost_model.bin</path>
|
||||
<!-- Интервал обновления. -->
|
||||
<lifetime>0</lifetime>
|
||||
</model>
|
||||
</models>
|
||||
```
|
||||
|
||||
**6.** Добавьте в конфигурацию ClickHouse путь к CatBoost и конфигурации модели:
|
||||
|
||||
```xml
|
||||
<!-- Файл etc/clickhouse-server/config.d/models_config.xml. -->
|
||||
<catboost_dynamic_library_path>/home/catboost/data/libcatboostmodel.so</catboost_dynamic_library_path>
|
||||
<models_config>/home/catboost/models/*_model.xml</models_config>
|
||||
```
|
||||
|
||||
## 4. Запустите вывод модели из SQL {#run-model-inference}
|
||||
|
||||
Для тестирования модели запустите клиент ClickHouse `$ clickhouse client`.
|
||||
|
||||
Проверьте, что модель работает:
|
||||
|
||||
```sql
|
||||
:) SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) > 0 AS prediction,
|
||||
ACTION AS target
|
||||
FROM amazon_train
|
||||
LIMIT 10
|
||||
```
|
||||
|
||||
!!! note "Примечание"
|
||||
Функция [modelEvaluate](../query_language/functions/other_functions.md#function-modelevaluate) возвращает кортежи (tuple) с исходными прогнозами по классам для моделей с несколькими классами.
|
||||
|
||||
Спрогнозируйте вероятность:
|
||||
|
||||
```sql
|
||||
:) SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) AS prediction,
|
||||
1. / (1 + exp(-prediction)) AS probability,
|
||||
ACTION AS target
|
||||
FROM amazon_train
|
||||
LIMIT 10
|
||||
```
|
||||
|
||||
!!! note "Примечание"
|
||||
Подробнее про функцию [exp()](../query_language/functions/math_functions.md).
|
||||
|
||||
Посчитайте логистическую функцию потерь (LogLoss) на всей выборке:
|
||||
|
||||
```sql
|
||||
:) SELECT -avg(tg * log(prob) + (1 - tg) * log(1 - prob)) AS logloss
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
modelEvaluate('amazon',
|
||||
RESOURCE,
|
||||
MGR_ID,
|
||||
ROLE_ROLLUP_1,
|
||||
ROLE_ROLLUP_2,
|
||||
ROLE_DEPTNAME,
|
||||
ROLE_TITLE,
|
||||
ROLE_FAMILY_DESC,
|
||||
ROLE_FAMILY,
|
||||
ROLE_CODE) AS prediction,
|
||||
1. / (1. + exp(-prediction)) AS prob,
|
||||
ACTION AS tg
|
||||
FROM amazon_train
|
||||
)
|
||||
```
|
||||
|
||||
!!! note "Примечание"
|
||||
Подробнее про функции [avg()](../query_language/agg_functions/reference.md#agg_function-avg), [log()](../query_language/functions/math_functions.md).
|
5
docs/ru/guides/index.md
Normal file
5
docs/ru/guides/index.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Руководства
|
||||
|
||||
Подробные пошаговые инструкции, которые помогут вам решать различные задачи с помощью ClickHouse.
|
||||
|
||||
- [Применение модели CatBoost в ClickHouse](apply_catboost_model.md)
|
@ -15,7 +15,7 @@ Connected to ClickHouse server version 0.0.26176.
|
||||
|
||||
## Использование {#cli_usage}
|
||||
|
||||
Клиент может быть использован в интерактивном и неинтерактивном (batch) режиме.
|
||||
Клиент может быть использован в интерактивном и не интерактивном (batch) режиме.
|
||||
Чтобы использовать batch режим, укажите параметр query, или отправьте данные в stdin (проверяется, что stdin - не терминал), или и то, и другое.
|
||||
Аналогично HTTP интерфейсу, при использовании одновременно параметра query и отправке данных в stdin, запрос составляется из конкатенации параметра query, перевода строки, и данных в stdin. Это удобно для больших INSERT запросов.
|
||||
|
||||
@ -140,4 +140,5 @@ $ clickhouse-client --param_tuple_in_tuple="(10, ('dt', 10))" -q "SELECT * FROM
|
||||
<secure>False</secure>
|
||||
</config>
|
||||
```
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/interfaces/cli/) <!--hide-->
|
||||
|
@ -939,7 +939,7 @@ ClickHouse поддерживает настраиваемую точность
|
||||
|
||||
Неподдержанные типы данных Parquet: `DATE32`, `TIME32`, `FIXED_SIZE_BINARY`, `JSON`, `UUID`, `ENUM`.
|
||||
|
||||
Типы данных столбцов в ClickHouse могут отличаться от типов данных соответствущих полей файла в формате Parquet. При вставке данных, ClickHouse интерпретирует типы данных в соответствии с таблицей выше, а затем [приводит](../query_language/functions/type_conversion_functions/#type_conversion_function-cast) данные к тому типу, который установлен для столбца таблицы.
|
||||
Типы данных столбцов в ClickHouse могут отличаться от типов данных соответствующих полей файла в формате Parquet. При вставке данных, ClickHouse интерпретирует типы данных в соответствии с таблицей выше, а затем [приводит](../query_language/functions/type_conversion_functions/#type_conversion_function-cast) данные к тому типу, который установлен для столбца таблицы.
|
||||
|
||||
### Inserting and Selecting Data
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
- [pg2ch](https://github.com/mkabilov/pg2ch)
|
||||
- [MSSQL](https://en.wikipedia.org/wiki/Microsoft_SQL_Server)
|
||||
- [ClickHouseMightrator](https://github.com/zlzforever/ClickHouseMigrator)
|
||||
- Очереди ообщений
|
||||
- Очереди сообщений
|
||||
- [Kafka](https://kafka.apache.org)
|
||||
- [clickhouse_sinker](https://github.com/housepower/clickhouse_sinker) (использует [Go client](https://github.com/kshvakov/clickhouse/))
|
||||
- Хранилища объектов
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
## Снимки файловой системы
|
||||
|
||||
Некоторые локальные файловые системы позволяют делать снимки (например, [ZFS](https://en.wikipedia.org/wiki/ZFS)), но они могут быть не лучшим выбором для обслуживания живых запросов. Возможным решением является создание дополнительных реплик с такой файловой системой и исключение их из [Distributed](table_engines/distributed.md) таблиц, используемых для запросов `SELECT`. Cнимки на таких репликах будут недоступны для запросов, изменяющих данные. В качестве бонуса, эти реплики могут иметь особые конфигурации оборудования с большим количеством дисков, подключенных к серверу, что будет экономически эффективным.
|
||||
Некоторые локальные файловые системы позволяют делать снимки (например, [ZFS](https://en.wikipedia.org/wiki/ZFS)), но они могут быть не лучшим выбором для обслуживания живых запросов. Возможным решением является создание дополнительных реплик с такой файловой системой и исключение их из [Distributed](table_engines/distributed.md) таблиц, используемых для запросов `SELECT`. Снимки на таких репликах будут недоступны для запросов, изменяющих данные. В качестве бонуса, эти реплики могут иметь особые конфигурации оборудования с большим количеством дисков, подключенных к серверу, что будет экономически эффективным.
|
||||
|
||||
## clickhouse-copier
|
||||
|
||||
|
@ -130,7 +130,7 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
## graphite {#server_settings-graphite}
|
||||
|
||||
Отправка даных в [Graphite](https://github.com/graphite-project).
|
||||
Отправка данных в [Graphite](https://github.com/graphite-project).
|
||||
|
||||
Настройки:
|
||||
|
||||
@ -213,7 +213,7 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
**Пример**
|
||||
|
||||
Показывает `https://tabix.io/` при обращенинии к `http://localhost:http_port`.
|
||||
Показывает `https://tabix.io/` при обращении к `http://localhost:http_port`.
|
||||
|
||||
```xml
|
||||
<http_server_default_response>
|
||||
@ -305,11 +305,11 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
## logger {#server_settings-logger}
|
||||
|
||||
Настройки логгирования.
|
||||
Настройки логирования.
|
||||
|
||||
Ключи:
|
||||
|
||||
- level - Уровень логгирования. Допустимые значения: ``trace``, ``debug``, ``information``, ``warning``, ``error``.
|
||||
- level - Уровень логирования. Допустимые значения: ``trace``, ``debug``, ``information``, ``warning``, ``error``.
|
||||
- log - Файл лога. Содержит все записи согласно ``level``.
|
||||
- errorlog - Файл лога ошибок.
|
||||
- size - Размер файла. Действует для ``log`` и ``errorlog``. Как только файл достиг размера ``size``, ClickHouse архивирует и переименовывает его, а на его месте создает новый файл лога.
|
||||
@ -407,7 +407,7 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
По умолчанию - `maximum`.
|
||||
|
||||
Рекомендуется использовать в Mac OS X, поскольу функция `getrlimit()` возвращает некорректное значение.
|
||||
Рекомендуется использовать в Mac OS X, поскольку функция `getrlimit()` возвращает некорректное значение.
|
||||
|
||||
**Пример**
|
||||
|
||||
@ -458,25 +458,25 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
Ключи настроек сервера/клиента:
|
||||
|
||||
- privateKeyFile - Путь к файлу с секретным ключем сертификата в формате PEM. Файл может содержать ключ и сертификат одновременно.
|
||||
- privateKeyFile - Путь к файлу с секретным ключом сертификата в формате PEM. Файл может содержать ключ и сертификат одновременно.
|
||||
- certificateFile - Путь к файлу сертификата клиента/сервера в формате PEM. Можно не указывать, если ``privateKeyFile`` содержит сертификат.
|
||||
- caConfig - Путь к файлу или каталогу, которые содержат доверенные корневые сертификаты.
|
||||
- verificationMode - Способ проверки сертификатов узла. Подробности находятся в описании класса [Context](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/Context.h). Допустимые значения: ``none``, ``relaxed``, ``strict``, ``once``.
|
||||
- verificationDepth - Максимальная длина верификационой цепи. Верификация завершится ошибкой, если длина цепи сертификатов превысит установленное значение.
|
||||
- verificationDepth - Максимальная длина верификационной цепи. Верификация завершится ошибкой, если длина цепи сертификатов превысит установленное значение.
|
||||
- loadDefaultCAFile - Признак того, что будут использоваться встроенные CA-сертификаты для OpenSSL. Допустимые значения: ``true``, ``false``. |
|
||||
- cipherList - Поддерживаемые OpenSSL-шифры. Например, ``ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH``.
|
||||
- cacheSessions - Включение/выключение кеширования сессии. Использовать обязательно вместе с ``sessionIdContext``. Допустимые значения: ``true``, ``false``.
|
||||
- sessionIdContext - Уникальный набор произвольных символов, которые сервер добавляет к каждому сгенерированному идентификатору. Длина строки не должна превышать ``SSL_MAX_SSL_SESSION_ID_LENGTH``. Рекомендуется к использованию всегда, поскольку позволяет избежать проблем как в случае, если сервер кеширует сессию, так и если клиент затребовал кеширование. По умолчанию ``${application.name}``.
|
||||
- sessionCacheSize - Максимальное количество сессий, которые кэширует сервер. По умолчанию - 1024\*20. 0 - неограниченное количество сессий.
|
||||
- sessionTimeout - Время кеширования сессии на севрере.
|
||||
- sessionTimeout - Время кеширования сессии на сервере.
|
||||
- extendedVerification - Автоматическая расширенная проверка сертификатов после завершении сессии. Допустимые значения: ``true``, ``false``.
|
||||
- requireTLSv1 - Требование соединения TLSv1. Допустимые значения: ``true``, ``false``.
|
||||
- requireTLSv1_1 - Требование соединения TLSv1.1. Допустимые значения: ``true``, ``false``.
|
||||
- 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>``.
|
||||
- disableProtocols - Запрещенные к искользованию протоколы.
|
||||
- invalidCertificateHandler - Класс (подкласс CertificateHandler) для подтверждения не валидных сертификатов. Например, ``<invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>``.
|
||||
- disableProtocols - Запрещенные к использованию протоколы.
|
||||
- preferServerCiphers - Предпочтение серверных шифров на клиенте.
|
||||
|
||||
**Пример настройки:**
|
||||
@ -512,11 +512,11 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat
|
||||
|
||||
## part_log {#server_settings-part-log}
|
||||
|
||||
Логгирование событий, связанных с данными типа [MergeTree](../../operations/table_engines/mergetree.md). Например, события добавления или мержа данных. Лог можно использовать для симуляции алгоритмов слияния, чтобы сравнивать их характеристики. Также, можно визуализировать процесс слияния.
|
||||
Логирование событий, связанных с данными типа [MergeTree](../../operations/table_engines/mergetree.md). Например, события добавления или мержа данных. Лог можно использовать для симуляции алгоритмов слияния, чтобы сравнивать их характеристики. Также, можно визуализировать процесс слияния.
|
||||
|
||||
Запросы логгируются не в отдельный файл, а в таблицу [system.part_log](../system_tables.md#system_tables-part-log). Вы можете изменить название этой таблицы в параметре `table` (см. ниже).
|
||||
Запросы логируются не в отдельный файл, а в таблицу [system.part_log](../system_tables.md#system_tables-part-log). Вы можете изменить название этой таблицы в параметре `table` (см. ниже).
|
||||
|
||||
При настройке логгирования используются следующие параметры:
|
||||
При настройке логирования используются следующие параметры:
|
||||
|
||||
- `database` — имя базы данных;
|
||||
- `table` — имя таблицы;
|
||||
@ -650,7 +650,7 @@ TCP порт для защищённого обмена данными с кли
|
||||
|
||||
Размер кеша (в байтах) для несжатых данных, используемых движками таблиц семейства [MergeTree](../../operations/table_engines/mergetree.md).
|
||||
|
||||
Кеш единый для сервера. Память выделяется по-требованию. Кеш используется в том случае, если включена опция [use_uncompressed_cache](../settings/settings.md).
|
||||
Кеш единый для сервера. Память выделяется по требованию. Кеш используется в том случае, если включена опция [use_uncompressed_cache](../settings/settings.md).
|
||||
|
||||
Несжатый кеш выгодно использовать для очень коротких запросов в отдельных случаях.
|
||||
|
||||
|
@ -12,11 +12,11 @@
|
||||
- Настройки для сессии.
|
||||
|
||||
Из консольного клиента ClickHouse в интерактивном режиме отправьте запрос `SET setting=value`.
|
||||
Аналогично можно использовать ClickHouse-сессии в HTTP-протоколе, для этого необходимо указывать HTTP-праметр `session_id`.
|
||||
Аналогично можно использовать ClickHouse-сессии в HTTP-протоколе, для этого необходимо указывать HTTP-параметр `session_id`.
|
||||
|
||||
- Настройки для запроса.
|
||||
|
||||
- При запуске консольного клиента ClickHouse в неинтерактивном режиме установите параметр запуска `--setting=value`.
|
||||
- При запуске консольного клиента ClickHouse в не интерактивном режиме установите параметр запуска `--setting=value`.
|
||||
- При использовании HTTP API передавайте cgi-параметры (`URL?setting_1=value&setting_2=value...`).
|
||||
|
||||
Настройки, которые можно задать только в конфигурационном файле сервера, в разделе не рассматриваются.
|
||||
|
@ -3,7 +3,7 @@
|
||||
Ограничения на сложность запроса - часть настроек.
|
||||
Используются, чтобы обеспечить более безопасное исполнение запросов из пользовательского интерфейса.
|
||||
Почти все ограничения действуют только на SELECT-ы.
|
||||
При распределённой обработке запроса, ограничения действуют на каждом сервере по-отдельности.
|
||||
При распределённой обработке запроса, ограничения действуют на каждом сервере по отдельности.
|
||||
|
||||
Ограничения проверяются на каждый блок обработанных данных, а не на каждую строку. В связи с этим, ограничения могут быть превышены на размер блока.
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
## max_rows_to_read
|
||||
|
||||
Следующие ограничения могут проверяться на каждый блок (а не на каждую строку). То есть, ограничения могут быть немного нарушены.
|
||||
При выполнении запроса в несколько потоков, следующие ограничения действуют в каждом потоке по-отдельности.
|
||||
При выполнении запроса в несколько потоков, следующие ограничения действуют в каждом потоке по отдельности.
|
||||
|
||||
Максимальное количество строчек, которое можно прочитать из таблицы при выполнении запроса.
|
||||
|
||||
@ -257,7 +257,7 @@
|
||||
**Смотрите также**
|
||||
|
||||
- [Секция JOIN](../../query_language/select.md#select-join)
|
||||
- [Движо таблиц Join](../table_engines/join.md)
|
||||
- [Движок таблиц Join](../table_engines/join.md)
|
||||
|
||||
## max_partitions_per_insert_block
|
||||
|
||||
|
@ -221,7 +221,7 @@ Ok.
|
||||
|
||||
## input_format_null_as_default {#settings-input_format_null_as_default}
|
||||
|
||||
Включает или отключает использование значений по-умолчанию в случаях, когда во входных данных содержится `NULL`, но тип соответствующего столбца не `Nullable(T)` (для текстовых форматов).
|
||||
Включает или отключает использование значений по умолчанию в случаях, когда во входных данных содержится `NULL`, но тип соответствующего столбца не `Nullable(T)` (для текстовых форматов).
|
||||
|
||||
## input_format_skip_unknown_fields {#settings-input_format_skip_unknown_fields}
|
||||
|
||||
@ -376,7 +376,7 @@ Ok.
|
||||
|
||||
## preferred_block_size_bytes
|
||||
|
||||
Служит для тех же целей что и `max_block_size`, но задает рекомедуемый размер блоков в байтах, выбирая адаптивное количество строк в блоке.
|
||||
Служит для тех же целей что и `max_block_size`, но задает рекомендуемый размер блоков в байтах, выбирая адаптивное количество строк в блоке.
|
||||
При этом размер блока не может быть более `max_block_size` строк.
|
||||
По умолчанию: 1,000,000. Работает только при чтении из MergeTree-движков.
|
||||
|
||||
@ -446,9 +446,9 @@ ClickHouse использует этот параметр при чтении д
|
||||
|
||||
## log_queries {#settings-log-queries}
|
||||
|
||||
Установка логгирования запроса.
|
||||
Установка логирования запроса.
|
||||
|
||||
Запросы, переданные в ClickHouse с этой установкой, логгируются согласно правилам конфигурационного параметра сервера [query_log](../server_settings/settings.md#server_settings-query-log).
|
||||
Запросы, переданные в ClickHouse с этой установкой, логируются согласно правилам конфигурационного параметра сервера [query_log](../server_settings/settings.md#server_settings-query-log).
|
||||
|
||||
**Пример** :
|
||||
|
||||
@ -470,7 +470,7 @@ ClickHouse использует этот параметр при чтении д
|
||||
|
||||
Отключает отстающие реплики при распределенных запросах. Смотрите "[Репликация](../../operations/table_engines/replication.md)".
|
||||
|
||||
Устанавливает время в секундах. Если оставание реплики больше установленного значения, то реплика не используется.
|
||||
Устанавливает время в секундах. Если отставание реплики больше установленного значения, то реплика не используется.
|
||||
|
||||
Значение по умолчанию: 300.
|
||||
|
||||
@ -644,9 +644,9 @@ load_balancing = in_order
|
||||
load_balancing = first_or_random
|
||||
```
|
||||
|
||||
Алгоритм выбирает первую реплику или случайную реплику, если первая недоступна. Он эффективен в топологиях с перекрестной репликацей, но бесполезен в других конфигурациях.
|
||||
Алгоритм выбирает первую реплику или случайную реплику, если первая недоступна. Он эффективен в топологиях с перекрестной репликацией, но бесполезен в других конфигурациях.
|
||||
|
||||
Алгоритм `first or random` решает проблему алгоритма `in order`. При использовании `in order`, если одна реплика перестаёт ответчать, то следующая за ней принимает двойную нагрузку, в то время как все остальные обрабатываю свой обычный трафик. Алгоритм `first or random` равномерно распределяет нагрузку между репликами.
|
||||
Алгоритм `first or random` решает проблему алгоритма `in order`. При использовании `in order`, если одна реплика перестаёт отвечать, то следующая за ней принимает двойную нагрузку, в то время как все остальные обрабатываю свой обычный трафик. Алгоритм `first or random` равномерно распределяет нагрузку между репликами.
|
||||
|
||||
## prefer_localhost_replica {#settings-prefer_localhost_replica}
|
||||
|
||||
|
@ -77,7 +77,7 @@ user String — имя пользователя, которого использ
|
||||
- `marks_bytes` (UInt64) — размер засечек в байтах.
|
||||
- `comment` (String) — комментарий к столбцу или пустая строка.
|
||||
- `is_in_partition_key` (UInt8) — флаг, показывающий включение столбца в ключ партиционирования.
|
||||
- `is_in_sorting_key` (UInt8) — флаг, показываюший включение столбца в ключ сортировки.
|
||||
- `is_in_sorting_key` (UInt8) — флаг, показывающий включение столбца в ключ сортировки.
|
||||
- `is_in_primary_key` (UInt8) — флаг, показывающий включение столбца в первичный ключ.
|
||||
- `is_in_sampling_key` (UInt8) — флаг, показывающий включение столбца в ключ выборки.
|
||||
|
||||
@ -394,9 +394,9 @@ query_id String - идентификатор запроса, если
|
||||
!!! note "Внимание"
|
||||
Таблица не содержит входных данных для запросов `INSERT`.
|
||||
|
||||
ClickHouse создаёт таблицу только в том случае, когда установлен конфигурационный параметр сервера [query_log](server_settings/settings.md#server_settings-query-log). Параметр задаёт правила ведения лога, такие как интервал логгирования или имя таблицы, в которую будут логгироваться запросы.
|
||||
ClickHouse создаёт таблицу только в том случае, когда установлен конфигурационный параметр сервера [query_log](server_settings/settings.md#server_settings-query-log). Параметр задаёт правила ведения лога, такие как интервал логирования или имя таблицы, в которую будут логгироваться запросы.
|
||||
|
||||
Чтобы включить логгирование, задайте значение параметра [log_queries](settings/settings.md#settings-log-queries) равным 1. Подробности смотрите в разделе [Настройки](settings/settings.md).
|
||||
Чтобы включить логирование, задайте значение параметра [log_queries](settings/settings.md#settings-log-queries) равным 1. Подробности смотрите в разделе [Настройки](settings/settings.md).
|
||||
|
||||
Таблица `system.query_log` содержит информацию о двух видах запросов:
|
||||
|
||||
@ -459,7 +459,7 @@ ClickHouse создаёт таблицу только в том случае, к
|
||||
- Количество сетевых ошибок.
|
||||
- Время, потраченное на ожидание, когда пропускная способность сети ограничена.
|
||||
- `ProfileEvents.Values` (Array(UInt64)) — метрики, перечисленные в столбце `ProfileEvents.Names`.
|
||||
- `Settings.Names` (Array(String)) — имена настроек, которые меняются, когда клиент выполняет запрос. Чтобы разрешить логгирование изменений настроек, установите параметр `log_query_settings` равным 1.
|
||||
- `Settings.Names` (Array(String)) — имена настроек, которые меняются, когда клиент выполняет запрос. Чтобы разрешить логирование изменений настроек, установите параметр `log_query_settings` равным 1.
|
||||
- `Settings.Values` (Array(String)) — Значения настроек, которые перечислены в столбце `Settings.Names`.
|
||||
|
||||
Каждый запрос создаёт одну или две строки в таблице `query_log`, в зависимости от статуса запроса:
|
||||
@ -468,7 +468,7 @@ ClickHouse создаёт таблицу только в том случае, к
|
||||
2. Если во время обработки запроса произошла ошибка, создаются два события с типами 1 и 4.
|
||||
3. Если ошибка произошла до запуска запроса, создается одно событие с типом 3.
|
||||
|
||||
По умолчанию, строки добавляются в таблицу логгирования с интервалом в 7,5 секунд. Можно задать интервал в конфигурационном параметре сервера [query_log](server_settings/settings.md#server_settings-query-log) (смотрите параметр `flush_interval_milliseconds`). Чтобы принудительно записать логи из буффера памяти в таблицу, используйте запрос `SYSTEM FLUSH LOGS`.
|
||||
По умолчанию, строки добавляются в таблицу логирования с интервалом в 7,5 секунд. Можно задать интервал в конфигурационном параметре сервера [query_log](server_settings/settings.md#server_settings-query-log) (смотрите параметр `flush_interval_milliseconds`). Чтобы принудительно записать логи из буффера памяти в таблицу, используйте запрос `SYSTEM FLUSH LOGS`.
|
||||
|
||||
Если таблицу удалить вручную, она пересоздастся автоматически "на лету". При этом все логи на момент удаления таблицы будут удалены.
|
||||
|
||||
|
@ -65,7 +65,7 @@ logs - имя кластера в конфигурационном файле с
|
||||
- `port` - TCP-порт для межсерверного взаимодействия (в конфиге - tcp_port, обычно 9000). Не перепутайте с http_port.
|
||||
- `user` - имя пользователя для соединения с удалённым сервером. по умолчанию - default. Этот пользователь должен иметь доступ для соединения с указанным сервером. Доступы настраиваются в файле users.xml, подробнее смотрите в разделе [Права доступа](../../operations/access_rights.md).
|
||||
- `password` - пароль для соединения с удалённым сервером, в открытом виде. по умолчанию - пустая строка.
|
||||
- `secure` - Использовать шифрованое соединение ssl, Обычно используется с портом `port` = 9440. Сервер должен слушать порт <tcp_port_secure>9440</tcp_port_secure> с корректными настройками сертификатов.
|
||||
- `secure` - Использовать шифрованное соединение ssl, Обычно используется с портом `port` = 9440. Сервер должен слушать порт <tcp_port_secure>9440</tcp_port_secure> с корректными настройками сертификатов.
|
||||
- `compression` - Использовать сжатие данных. По умолчанию: true.
|
||||
|
||||
|
||||
|
@ -6,7 +6,7 @@ ClickHouse позволяет отправить на сервер данные,
|
||||
|
||||
Если вам нужно будет выполнить более одного запроса с достаточно большими внешними данными - лучше не использовать эту функциональность, а загрузить данные в БД заранее.
|
||||
|
||||
Внешние данные могут быть загружены как с помощью клиента командной строки (в неинтерактивном режиме), так и через HTTP-интерфейс.
|
||||
Внешние данные могут быть загружены как с помощью клиента командной строки (в не интерактивном режиме), так и через HTTP-интерфейс.
|
||||
|
||||
В клиенте командной строки, может быть указана секция параметров вида
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# MergeTree {#table_engines-mergetree}
|
||||
|
||||
Движок `MergeTree`, а также другие движки этого семейства (`*MergeTree`) — это наиболее функциональные движки таблиц ClickHousе.
|
||||
Движок `MergeTree`, а также другие движки этого семейства (`*MergeTree`) — это наиболее функциональные движки таблиц ClickHouse.
|
||||
|
||||
Основная идея, заложенная в основу движков семейства `MergeTree` следующая. Когда у вас есть огромное количество данных, которые должны быть вставлены в таблицу, вы должны быстро записать их по частям, а затем объединить части по некоторым правилам в фоновом режиме. Этот метод намного эффективнее, чем постоянная перезапись данных в хранилище при вставке.
|
||||
|
||||
|
@ -61,9 +61,9 @@
|
||||
|
||||
Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос `INSERT`. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. Запрос `INSERT` идемпотентный. Параметры дедуплицирования регулируются настройками сервера [merge_tree](../server_settings/settings.md#server_settings-merge_tree)
|
||||
|
||||
При репликации, по сети передаются только исходные вставляемые данные. Дальнейшие преобразования данных (слияния) координируются и делаются на всех репликах одинаковым образом. За счёт этого минимизируется использование сети, и благодаря этому, репликация хорошо работает при расположении реплик в разных датацентрах. (Стоит заметить, что дублирование данных в разных датацентрах, по сути, является основной задачей репликации).
|
||||
При репликации, по сети передаются только исходные вставляемые данные. Дальнейшие преобразования данных (слияния) координируются и делаются на всех репликах одинаковым образом. За счёт этого минимизируется использование сети, и благодаря этому, репликация хорошо работает при расположении реплик в разных дата-центрах. (Стоит заметить, что дублирование данных в разных дата-центрах, по сути, является основной задачей репликации).
|
||||
|
||||
Количество реплик одних и тех же данных может быть произвольным. В Яндекс.Метрике в продакшене используется двухкратная репликация. На каждом сервере используется RAID-5 или RAID-6, в некоторых случаях RAID-10. Это является сравнительно надёжным и удобным для эксплуатации решением.
|
||||
Количество реплик одних и тех же данных может быть произвольным. В Яндекс.Метрике в продакшене используется двукратная репликация. На каждом сервере используется RAID-5 или RAID-6, в некоторых случаях RAID-10. Это является сравнительно надёжным и удобным для эксплуатации решением.
|
||||
|
||||
Система следит за синхронностью данных на репликах и умеет восстанавливаться после сбоя. Восстановление после сбоя автоматическое (в случае небольших различий в данных) или полуавтоматическое (когда данные отличаются слишком сильно, что может свидетельствовать об ошибке конфигурации).
|
||||
|
||||
|
@ -31,7 +31,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
|
||||
|
||||
**Секции запроса**
|
||||
|
||||
При создании таблицы `SummingMergeTree` использутся те же [секции](mergetree.md) запроса, что и при создании таблицы `MergeTree`.
|
||||
При создании таблицы `SummingMergeTree` используются те же [секции](mergetree.md) запроса, что и при создании таблицы `MergeTree`.
|
||||
|
||||
<details markdown="1"><summary>Устаревший способ создания таблицы</summary>
|
||||
|
||||
|
@ -11,7 +11,7 @@ $ echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_gov
|
||||
## Ограничение CPU
|
||||
|
||||
Процессоры могут перегреваться. С помощью `dmesg` можно увидеть, если тактовая частота процессора была ограничена из-за перегрева.
|
||||
Также ограничение может устанавливаться снаружи на уровне датацентра. С помощью `turbostat` можно за этим наблюдать под нагрузкой.
|
||||
Также ограничение может устанавливаться снаружи на уровне дата-центра. С помощью `turbostat` можно за этим наблюдать под нагрузкой.
|
||||
|
||||
## Оперативная память
|
||||
|
||||
|
@ -128,7 +128,7 @@ $ curl 'http://localhost:8123/' --data-binary "SELECT a"
|
||||
Code: 47, e.displayText() = DB::Exception: Unknown identifier: a. Note that there are no tables (FROM clause) in your query, context: required_names: 'a' source_tables: table_aliases: private_aliases: column_aliases: public_columns: 'a' masked_columns: array_join_columns: source_columns: , e.what() = DB::Exception
|
||||
```
|
||||
|
||||
Если вы запускаете `clickhouse-client` c параметром `stack-trace`, то ClickHouse возвращает описание ошибки и соответствущий стек вызовов функций на сервере.
|
||||
Если вы запускаете `clickhouse-client` c параметром `stack-trace`, то ClickHouse возвращает описание ошибки и соответствующий стек вызовов функций на сервере.
|
||||
|
||||
Может появиться сообщение о разрыве соединения. В этом случае необходимо повторить запрос. Если соединение прерывается каждый раз при выполнении запроса, следует проверить журналы сервера на наличие ошибок.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
ClickHouse поддерживает также:
|
||||
|
||||
- [Параметрические агрегатные функции](parametric_functions.md#aggregate_functions_parametric), которые помимо столбцов принимаю и другие параметры.
|
||||
- [Комбинаторы](combinators.md#aggregate_functions_combinators), которые изменяют поведение агрегатных фунций.
|
||||
- [Комбинаторы](combinators.md#aggregate_functions_combinators), которые изменяют поведение агрегатных функций.
|
||||
|
||||
## Обработка NULL
|
||||
|
||||
@ -40,7 +40,7 @@ SELECT sum(y) FROM t_null_big
|
||||
Функция `sum` работает с `NULL` как с `0`. В частности, это означает, что если на вход в функцию подать выборку, где все значения `NULL`, то результат будет `0`, а не `NULL`.
|
||||
|
||||
|
||||
Теперь с помощью фукции `groupArray` сформируем массив из стобца `y`:
|
||||
Теперь с помощью функции `groupArray` сформируем массив из столбца `y`:
|
||||
|
||||
```sql
|
||||
SELECT groupArray(y) FROM t_null_big
|
||||
|
@ -182,7 +182,7 @@ ORDER BY level
|
||||
Рекомендуется использовать для маленьких N - до 10. Максимальное значение N - 100.
|
||||
|
||||
Для состояния агрегатной функции используется количество оперативки равное 1 + N \* размер одного значения байт.
|
||||
Для строк запоминается некриптографический хэш, имеющий размер 8 байт. То есть, для строк вычисление приближённое.
|
||||
Для строк запоминается не криптографический хэш, имеющий размер 8 байт. То есть, для строк вычисление приближённое.
|
||||
|
||||
Функция также работает для нескольких аргументов.
|
||||
|
||||
|
@ -509,7 +509,7 @@ FROM (
|
||||
## timeSeriesGroupRateSum(uid, ts, val) {#agg_function-timeseriesgroupratesum}
|
||||
|
||||
Аналогично timeSeriesGroupRateSum, timeSeriesGroupRateSum будет вычислять производные по timestamp для рядов, а затем суммировать полученные производные для всех рядов для одного значения timestamp.
|
||||
Также ряды должны быть отсотированы по возрастанию timestamp.
|
||||
Также ряды должны быть отсортированы по возрастанию timestamp.
|
||||
|
||||
Для пример из описания timeSeriesGroupRateSum результат будет следующим:
|
||||
|
||||
@ -1083,7 +1083,7 @@ stochasticLinearRegression(1.0, 1.0, 10, 'SGD')
|
||||
|
||||
### Использование {#agg_functions-stochasticlinearregression-usage}
|
||||
|
||||
`stochasticLinearRegression` используется на двух этапах: постоение модели и предсказание новых данных. Чтобы постоить модель и сохранить её состояние для дальнейшего использования, мы используем комбинатор `-State`.
|
||||
`stochasticLinearRegression` используется на двух этапах: построение модели и предсказание новых данных. Чтобы построить модель и сохранить её состояние для дальнейшего использования, мы используем комбинатор `-State`.
|
||||
Для прогнозирования мы используем функцию [evalMLMethod](../functions/machine_learning_functions.md#machine_learning_methods-evalmlmethod), которая принимает в качестве аргументов состояние и свойства для прогнозирования.
|
||||
|
||||
<a name="stochasticlinearregression-usage-fitting"></a>
|
||||
|
@ -55,7 +55,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
|
||||
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_fucntion()
|
||||
```
|
||||
|
||||
Создаёт таблицу с такой же структурой и данными, как результат соотвествующей табличной функцией.
|
||||
Создаёт таблицу с такой же структурой и данными, как результат соответствующей табличной функцией.
|
||||
|
||||
```sql
|
||||
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Размещение с кэшированием не рекомендуется использовать из-за потенциально низкой производительности и сложностей в подборе оптимальных параметров. Читайте об этом подробнее в разделе "[cache](#cache)".
|
||||
|
||||
Повысить производительнось словарей можно следующими способами:
|
||||
Повысить производительность словарей можно следующими способами:
|
||||
|
||||
- Вызывать функцию для работы со словарём после `GROUP BY`.
|
||||
- Помечать извлекаемые атрибуты как инъективные. Атрибут называется инъективным, если разным ключам соответствуют разные значения атрибута. Тогда при использовании в `GROUP BY` функции, достающей значение атрибута по ключу, эта функция автоматически выносится из `GROUP BY`.
|
||||
@ -281,6 +281,6 @@ dictGetString('prefix', 'asn', tuple(IPv6StringToNum('2001:db8::1')))
|
||||
|
||||
Никакие другие типы не поддерживаются. Функция возвращает атрибут для префикса, соответствующего данному IP-адресу. Если есть перекрывающиеся префиксы, возвращается наиболее специфический.
|
||||
|
||||
Данные хранятся в побитовом дереве (`trie`), он должены полностью помещаться в оперативной памяти.
|
||||
Данные хранятся в побитовом дереве (`trie`), он должен полностью помещаться в оперативной памяти.
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/dicts/external_dicts_dict_layout/) <!--hide-->
|
||||
|
@ -122,12 +122,12 @@
|
||||
|
||||
ClickHouse получает от ODBC-драйвера информацию о квотировании и квотирует настройки в запросах к драйверу, поэтому имя таблицы нужно указывать в соответствии с регистром имени таблицы в базе данных.
|
||||
|
||||
Если у вас есть проблемы с кодировками при использовании Oracle, ознакомьтесь с соответствущим разделом [FAQ](../../faq/general.md#oracle-odbc-encodings).
|
||||
Если у вас есть проблемы с кодировками при использовании Oracle, ознакомьтесь с соответствующим разделом [FAQ](../../faq/general.md#oracle-odbc-encodings).
|
||||
|
||||
### Выявленная уязвимость в функционировании ODBC словарей
|
||||
|
||||
!!! attention
|
||||
При соединении с базой данных через ODBC можно заменить параметр соединения `Servername`. В этом случае, значения `USERNAME` и `PASSWORD` из `odbc.ini` отправляются на удаленный сервер и могут быть скомпроментированы.
|
||||
При соединении с базой данных через ODBC можно заменить параметр соединения `Servername`. В этом случае, значения `USERNAME` и `PASSWORD` из `odbc.ini` отправляются на удаленный сервер и могут быть скомпрометированы.
|
||||
|
||||
**Пример небезопасного использования**
|
||||
|
||||
|
@ -56,10 +56,10 @@ ClickHouse поддерживает следующие виды ключей:
|
||||
|
||||
### Составной ключ
|
||||
|
||||
Ключoм может быть кортеж (`tuple`) из полей произвольных типов. В этом случае [layout](external_dicts_dict_layout.md) должен быть `complex_key_hashed` или `complex_key_cache`.
|
||||
Ключом может быть кортеж (`tuple`) из полей произвольных типов. В этом случае [layout](external_dicts_dict_layout.md) должен быть `complex_key_hashed` или `complex_key_cache`.
|
||||
|
||||
!!! tip "Совет"
|
||||
Cоставной ключ может состоять из одного элемента. Это даёт возможность использовать в качестве ключа, например, строку.
|
||||
Составной ключ может состоять из одного элемента. Это даёт возможность использовать в качестве ключа, например, строку.
|
||||
|
||||
Структура ключа задаётся в элементе `<key>`. Поля ключа задаются в том же формате, что и [атрибуты](external_dicts_dict_structure.md) словаря. Пример:
|
||||
|
||||
|
@ -16,13 +16,13 @@ dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
|
||||
- `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
|
||||
- `attr_name` — имя столбца словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
|
||||
- `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../data_types/int_uint.md) или [Tuple](../../data_types/tuple.md) в зависимости от конфигурации словаря.
|
||||
- `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключем `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
|
||||
- `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключом `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
|
||||
|
||||
**Возвращаемое значение**
|
||||
|
||||
- Значение атрибута, соответствующее ключу `id_expr`, если ClickHouse смог привести это значение к [заданному типу данных](../dicts/external_dicts_dict_structure.md#ext_dict_structure-attributes).
|
||||
|
||||
- Если ключа, соответствущего `id_expr` в словаре нет, то:
|
||||
- Если ключа, соответствующего `id_expr` в словаре нет, то:
|
||||
- `dictGet` возвращает содержимое элемента `<null_value>`, указанного для атрибута в конфигурации словаря.
|
||||
- `dictGetOrDefault` возвращает атрибут `default_value_expr`.
|
||||
|
||||
@ -177,7 +177,7 @@ dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
|
||||
- `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
|
||||
- `attr_name` — имя столбца словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
|
||||
- `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../data_types/int_uint.md).
|
||||
- `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключем `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
|
||||
- `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключом `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
|
||||
|
||||
**Возвращаемое значение**
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Функции для работы с Nullable-агрументами
|
||||
# Функции для работы с Nullable-аргументами
|
||||
|
||||
## isNull
|
||||
|
||||
|
@ -80,7 +80,7 @@ pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
|
||||
|
||||
- `(x, y)` — координаты точки на плоскости. Тип данных — [Tuple](../../data_types/tuple.md) — кортеж из двух чисел.
|
||||
- `[(a, b), (c, d) ...]` — вершины многоугольника. Тип данных — [Array](../../data_types/array.md). Каждая вершина представлена парой координат `(a, b)`. Вершины следует указывать в порядке обхода по или против часовой стрелки. Минимальное количество вершин — 3. Многоугольник должен быть константным.
|
||||
- функция поддерживает также многоугольники с дырками (вырезанными кусками). Для этого случая, добавьте многоугольники, описывающие вырезанные куски, дополнительными аргументами функции. Функция не поддерживает неодносвязные многоугольники.
|
||||
- функция поддерживает также многоугольники с дырками (вырезанными кусками). Для этого случая, добавьте многоугольники, описывающие вырезанные куски, дополнительными аргументами функции. Функция не поддерживает не односвязные многоугольники.
|
||||
|
||||
**Возвращаемые значения**
|
||||
|
||||
|
@ -122,7 +122,7 @@ SELECT groupBitXor(cityHash64(*)) FROM table
|
||||
## intHash32
|
||||
|
||||
Вычисляет 32-битный хэш-код от целого числа любого типа.
|
||||
Это сравнительно быстрая некриптографическая хэш-функция среднего качества для чисел.
|
||||
Это сравнительно быстрая не криптографическая хэш-функция среднего качества для чисел.
|
||||
|
||||
## intHash64
|
||||
|
||||
@ -142,7 +142,7 @@ SELECT groupBitXor(cityHash64(*)) FROM table
|
||||
|
||||
## URLHash(url\[, N\])
|
||||
|
||||
Быстрая некриптографическая хэш-функция неплохого качества для строки, полученной из URL путём некоторой нормализации.
|
||||
Быстрая не криптографическая хэш-функция неплохого качества для строки, полученной из URL путём некоторой нормализации.
|
||||
`URLHash(s)` - вычислить хэш от строки без одного завершающего символа `/`, `?` или `#` на конце, если там такой есть.
|
||||
`URLHash(s, N)` - вычислить хэш от строки до N-го уровня в иерархии URL, без одного завершающего символа `/`, `?` или `#` на конце, если там такой есть.
|
||||
Уровни аналогичные URLHierarchy. Функция специфична для Яндекс.Метрики.
|
||||
|
@ -782,3 +782,9 @@ SELECT identity(42)
|
||||
Используется для отладки и тестирования, позволяет "сломать" доступ по индексу, и получить результат и производительность запроса для полного сканирования.
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/other_functions/) <!--hide-->
|
||||
|
||||
## modelEvaluate(model_name, ...) {#function-modelevaluate}
|
||||
|
||||
Оценивает внешнюю модель.
|
||||
|
||||
Принимает на вход имя и аргументы модели. Возвращает Float64.
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Функции генерации псевдослучайных чисел
|
||||
|
||||
Используются некриптографические генераторы псевдослучайных чисел.
|
||||
Используются не криптографические генераторы псевдослучайных чисел.
|
||||
|
||||
Все функции принимают ноль аргументов или один аргумент.
|
||||
В случае, если передан аргумент - он может быть любого типа, и его значение никак не используется.
|
||||
|
@ -76,7 +76,7 @@ SELECT toValidUTF8('\x61\xF0\x80\x80\x80b')
|
||||
|
||||
## format(pattern, s0, s1, ...)
|
||||
|
||||
Форматирует константный шаблон со строками, перечисленными в аргументах. `pattern` -- упрощенная версия шаблона в языке Python. Шаблон содержит "заменяющие поля", которые окружены фигурными скобками `{}`. Всё, что не содержится в скобках, интерпретируется как обычный текст и просто копируется. Если нужно использовать символ фигурной скобки, можно экранивать двойной скобкой `{{` или `}}`. Имя полей могут быть числами (нумерация с нуля) или пустыми (тогда они интерпретируются как последовательные числа).
|
||||
Форматирует константный шаблон со строками, перечисленными в аргументах. `pattern` -- упрощенная версия шаблона в языке Python. Шаблон содержит "заменяющие поля", которые окружены фигурными скобками `{}`. Всё, что не содержится в скобках, интерпретируется как обычный текст и просто копируется. Если нужно использовать символ фигурной скобки, можно экранировать двойной скобкой `{{` или `}}`. Имя полей могут быть числами (нумерация с нуля) или пустыми (тогда они интерпретируются как последовательные числа).
|
||||
|
||||
```sql
|
||||
SELECT format('{1} {0} {1}', 'World', 'Hello')
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Функции поиска в строках
|
||||
|
||||
Во всех функциях, поиск регистрозависимый по-умолчанию. Существуют варианты функций для регистронезависимого поиска.
|
||||
Во всех функциях, поиск регистрозависимый по умолчанию. Существуют варианты функций для регистронезависимого поиска.
|
||||
|
||||
## position(haystack, needle)
|
||||
Поиск подстроки `needle` в строке `haystack`.
|
||||
@ -103,7 +103,7 @@
|
||||
|
||||
## ngramDistance(haystack, needle)
|
||||
|
||||
Вычисление 4-граммного расстояния между `haystack` и `needle`: считается симметрическая разность между двумя мультимножествами 4-грамм и нормализается на сумму их мощностей. Возвращает число float от 0 до 1 -- чем ближе к нулю, тем больше строки похожи друг на друга. Если константный `needle` или `haystack` больше чем 32КБ, кидается исключение. Если некоторые строки из неконстантного `haystack` или `needle` больше 32КБ, расстояние всегда равно единице.
|
||||
Вычисление 4-граммного расстояния между `haystack` и `needle`: считается симметрическая разность между двумя мультимножествами 4-грамм и нормализуется на сумму их мощностей. Возвращает число float от 0 до 1 -- чем ближе к нулю, тем больше строки похожи друг на друга. Если константный `needle` или `haystack` больше чем 32КБ, кидается исключение. Если некоторые строки из неконстантного `haystack` или `needle` больше 32КБ, расстояние всегда равно единице.
|
||||
|
||||
Для поиска без учета регистра и/или в формате UTF-8 используйте функции `ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8`.
|
||||
|
||||
|
@ -527,7 +527,7 @@ FROM <left_subquery>
|
||||
|
||||
Если запрос содержит секцию `WHERE`, ClickHouse пытается пробросить фильтры из этой секции в промежуточный `JOIN`. Если он не может пробросить фильтр в каждый промежуточный `JOIN`, ClickHouse применяет фильтры после того, как все `JOIN` будут выполнены.
|
||||
|
||||
Для создания запросов мы рекомендуем использоват синтаксис `JOIN ON` или `JOIN USING`. Например:
|
||||
Для создания запросов мы рекомендуем использовать синтаксис `JOIN ON` или `JOIN USING`. Например:
|
||||
|
||||
```sql
|
||||
SELECT * FROM t1 JOIN t2 ON t1.a = t2.a JOIN t3 ON t1.a = t3.a
|
||||
@ -1082,7 +1082,7 @@ SELECT CounterID, 2 AS table, sum(Sign) AS c
|
||||
В отличие от MySQL, файл создаётся на стороне клиента. Если файл с таким именем уже существует, это приведёт к ошибке.
|
||||
Функциональность доступна в клиенте командной строки и clickhouse-local (попытка выполнить запрос с INTO OUTFILE через HTTP интерфейс приведёт к ошибке).
|
||||
|
||||
Формат вывода по умолчанию - TabSeparated, как и в неинтерактивном режиме клиента командной строки.
|
||||
Формат вывода по умолчанию - TabSeparated, как и в не интерактивном режиме клиента командной строки.
|
||||
|
||||
### Секция FORMAT
|
||||
|
||||
@ -1289,10 +1289,10 @@ SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID GLOBAL
|
||||
Это гораздо более оптимально, чем при использовании обычного IN. Но при этом, следует помнить о нескольких вещах:
|
||||
|
||||
1. При создании временной таблицы данные не уникализируются. Чтобы уменьшить объём передаваемых по сети данных, укажите в подзапросе DISTINCT (для обычного IN-а этого делать не нужно).
|
||||
2. Временная таблица будет передана на все удалённые серверы. Передача не учитывает топологию сети. Например, если 10 удалённых серверов расположены в удалённом относительно сервера-инициатора запроса датацентре, то по каналу в удалённый датацентр данные будет переданы 10 раз. Старайтесь не использовать большие множества при использовании GLOBAL IN.
|
||||
2. Временная таблица будет передана на все удалённые серверы. Передача не учитывает топологию сети. Например, если 10 удалённых серверов расположены в удалённом относительно сервера-инициатора запроса дата-центре, то по каналу в удалённый дата-центр данные будет переданы 10 раз. Старайтесь не использовать большие множества при использовании GLOBAL IN.
|
||||
3. При передаче данных на удалённые серверы не настраивается ограничение использования сетевой полосы. Вы можете перегрузить сеть.
|
||||
4. Старайтесь распределять данные по серверам так, чтобы в GLOBAL IN-ах не было частой необходимости.
|
||||
5. Если в GLOBAL IN есть частая необходимость, то спланируйте размещение кластера ClickHouse таким образом, чтобы в каждом датацентре была хотя бы одна реплика каждого шарда, и среди них была быстрая сеть - чтобы запрос целиком можно было бы выполнить, передавая данные в пределах одного датацентра.
|
||||
5. Если в GLOBAL IN есть частая необходимость, то спланируйте размещение кластера ClickHouse таким образом, чтобы в каждом дата-центре была хотя бы одна реплика каждого шарда, и среди них была быстрая сеть - чтобы запрос целиком можно было бы выполнить, передавая данные в пределах одного дата-центра.
|
||||
|
||||
В секции `GLOBAL IN` также имеет смысл указывать локальную таблицу - в случае, если эта локальная таблица есть только на сервере-инициаторе запроса, и вы хотите воспользоваться данными из неё на удалённых серверах.
|
||||
|
||||
|
@ -56,7 +56,7 @@ SELECT name, status FROM system.dictionaries;
|
||||
|
||||
## Управление распределёнными таблицами {#query_language-system-distributed}
|
||||
|
||||
ClickHouse может оперировать [распределёнными](../operations/table_engines/distributed.md) таблицами. Когда пользователь вставляет данные в эти таблицы, ClickHouse сначала формирует очередь из данных, которые должны быть отправлены на узлы кластера, а затем асинхронно отправляет подготовленные данные. Вы пожете управлять очередью с помощью запросов [STOP DISTRIBUTED SENDS](#query_language-system-stop-distributed-sends), [START DISTRIBUTED SENDS](#query_language-system-start-distributed-sends) и [FLUSH DISTRIBUTED](#query_language-system-flush-distributed). Также есть возможность синхронно вставлять распределенные данные с помощью настройки `insert_distributed_sync`.
|
||||
ClickHouse может оперировать [распределёнными](../operations/table_engines/distributed.md) таблицами. Когда пользователь вставляет данные в эти таблицы, ClickHouse сначала формирует очередь из данных, которые должны быть отправлены на узлы кластера, а затем асинхронно отправляет подготовленные данные. Вы можете управлять очередью с помощью запросов [STOP DISTRIBUTED SENDS](#query_language-system-stop-distributed-sends), [START DISTRIBUTED SENDS](#query_language-system-start-distributed-sends) и [FLUSH DISTRIBUTED](#query_language-system-flush-distributed). Также есть возможность синхронно вставлять распределенные данные с помощью настройки `insert_distributed_sync`.
|
||||
|
||||
### STOP DISTRIBUTED SENDS {#query_language-system-stop-distributed-sends}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
`jdbc(jdbc_connection_uri, schema, table)` - возвращает таблицу, соединение с которой происходит через JDBC-драйвер.
|
||||
|
||||
Для работы этой табличной функциии требуется отдельно запускать приложение clickhouse-jdbc-bridge.
|
||||
Для работы этой табличной функции требуется отдельно запускать приложение clickhouse-jdbc-bridge.
|
||||
Данная функция поддерживает Nullable типы (на основании DDL таблицы к которой происходит запрос).
|
||||
|
||||
|
||||
|
@ -72,6 +72,6 @@ example01-{01..02}-{1|2}
|
||||
Если пользователь не задан,то используется `default`.
|
||||
Если пароль не задан, то используется пустой пароль.
|
||||
|
||||
`remoteSecure` - аналогично функции `remote`, но с соединением по шифрованому каналу. Порт по умолчанию - `tcp_port_secure` из конфига или 9440.
|
||||
`remoteSecure` - аналогично функции `remote`, но с соединением по шифрованному каналу. Порт по умолчанию - `tcp_port_secure` из конфига или 9440.
|
||||
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/table_functions/remote/) <!--hide-->
|
||||
|
@ -30,7 +30,7 @@ unixODBC позволял указать путь для подключения
|
||||
|
||||
### CVE-2018-14670
|
||||
|
||||
Некоррректная конфигурация в deb пакете могла привести к неавторизованному доступу к базе данных.
|
||||
Некорректная конфигурация в deb пакете могла привести к неавторизованному доступу к базе данных.
|
||||
|
||||
Обнаружено благодаря: the UK's National Cyber Security Centre (NCSC)
|
||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/security_changelog/) <!--hide-->
|
||||
|
@ -204,6 +204,10 @@ nav:
|
||||
- 'clickhouse-copier': 'operations/utils/clickhouse-copier.md'
|
||||
- 'clickhouse-local': 'operations/utils/clickhouse-local.md'
|
||||
|
||||
- 'Guides':
|
||||
- 'Overview': 'guides/index.md'
|
||||
- 'Applying CatBoost Models': 'guides/apply_catboost_model.md'
|
||||
|
||||
- 'Development':
|
||||
- 'hidden': 'development/index.md'
|
||||
- 'Overview of ClickHouse Architecture': 'development/architecture.md'
|
||||
|
@ -142,7 +142,7 @@ nav:
|
||||
- 'Функции для реализации оператора IN.': 'query_language/functions/in_functions.md'
|
||||
- 'Функция arrayJoin': 'query_language/functions/array_join.md'
|
||||
- 'Функции для работы с географическими координатами': 'query_language/functions/geo.md'
|
||||
- 'Функции c Nullable агрументами': 'query_language/functions/functions_for_nulls.md'
|
||||
- 'Функции c Nullable аргументами': 'query_language/functions/functions_for_nulls.md'
|
||||
- 'Функции машинного обучения': 'query_language/functions/machine_learning_functions.md'
|
||||
- 'Прочие функции': 'query_language/functions/other_functions.md'
|
||||
- 'Агрегатные функции':
|
||||
@ -203,6 +203,10 @@ nav:
|
||||
- 'clickhouse-copier': 'operations/utils/clickhouse-copier.md'
|
||||
- 'clickhouse-local': 'operations/utils/clickhouse-local.md'
|
||||
|
||||
- 'Руководства':
|
||||
- 'Обзор': 'guides/index.md'
|
||||
- 'Применение CatBoost моделей': 'guides/apply_catboost_model.md'
|
||||
|
||||
- 'F.A.Q.':
|
||||
- 'Общие вопросы': 'faq/general.md'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user