mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 09:02:00 +00:00
DOCAPI-6424: ASOF JOIN docs. EN review. RU translation. (#6140)
EN review. RU translation.
This commit is contained in:
parent
a109339ce6
commit
332cb7bde7
@ -209,7 +209,7 @@ Possible values:
|
|||||||
- 0 — Disabled.
|
- 0 — Disabled.
|
||||||
- 1 — Enabled.
|
- 1 — Enabled.
|
||||||
|
|
||||||
Default value: 0.
|
Default value: 1.
|
||||||
|
|
||||||
## input_format_skip_unknown_fields {#settings-input_format_skip_unknown_fields}
|
## input_format_skip_unknown_fields {#settings-input_format_skip_unknown_fields}
|
||||||
|
|
||||||
@ -306,8 +306,8 @@ Default value: `ALL`.
|
|||||||
|
|
||||||
Changes behavior of join operations with `ANY` strictness.
|
Changes behavior of join operations with `ANY` strictness.
|
||||||
|
|
||||||
!!! note "Attention"
|
!!! warning "Attention"
|
||||||
This setting applies only for the [Join](../table_engines/join.md) table engine.
|
This setting applies only for `JOIN` operations with [Join](../table_engines/join.md) engine tables.
|
||||||
|
|
||||||
Possible values:
|
Possible values:
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ Default value: 0.
|
|||||||
|
|
||||||
## join_any_take_last_row {#settings-join_any_take_last_row}
|
## join_any_take_last_row {#settings-join_any_take_last_row}
|
||||||
|
|
||||||
Changes the behavior of `ANY JOIN`. When disabled, `ANY JOIN` takes the first row found for a key. When enabled, `ANY JOIN` takes the last matched row, if there are multiple rows for the same key. The setting is used only in [Join table engine](../table_engines/join.md).
|
Changes the behavior of `ANY JOIN`. When disabled, `ANY JOIN` takes the first row found for a key. When enabled, `ANY JOIN` takes the last matched row if there are multiple rows for the same key. The setting is used only in [Join table engine](../table_engines/join.md).
|
||||||
|
|
||||||
Possible values:
|
Possible values:
|
||||||
|
|
||||||
|
@ -537,13 +537,25 @@ ClickHouse doesn't directly support syntax with commas, so we don't recommend us
|
|||||||
|
|
||||||
#### Strictness {#select-join-strictness}
|
#### Strictness {#select-join-strictness}
|
||||||
|
|
||||||
- `ALL` — If the right table has several matching rows, ClickHouse creates a [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) from matching rows. This is the normal `JOIN` behavior for standard SQL.
|
- `ALL` — If the right table has several matching rows, ClickHouse creates a [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) from matching rows. This is the standard `JOIN` behavior in SQL.
|
||||||
- `ANY` — If the right table has several matching rows, only the first one found is joined. If the right table has only one matching row, the results of queries with `ANY` and `ALL` keywords are the same.
|
- `ANY` — If the right table has several matching rows, only the first one found is joined. If the right table has only one matching row, the results of queries with `ANY` and `ALL` keywords are the same.
|
||||||
- `ASOF` — For joining sequences with a non-exact match. Usage of `ASOF JOIN` is described below.
|
- `ASOF` — For joining sequences with a non-exact match. `ASOF JOIN` usage is described below.
|
||||||
|
|
||||||
**ASOF JOIN Usage**
|
**ASOF JOIN Usage**
|
||||||
|
|
||||||
`ASOF JOIN` is useful when you need to join records that have no exact match. For example, consider the following tables:
|
`ASOF JOIN` is useful when you need to join records that have no exact match.
|
||||||
|
|
||||||
|
Tables for `ASOF JOIN` must have an ordered sequence column. This column cannot be alone in a table, and should be one of the data types: `UInt32`, `UInt64`, `Float32`, `Float64`, `Date`, and `DateTime`.
|
||||||
|
|
||||||
|
Use the following syntax for `ASOF JOIN`:
|
||||||
|
|
||||||
|
```
|
||||||
|
SELECT expression_list FROM table_1 ASOF JOIN table_2 USING(equi_column1, ... equi_columnN, asof_column)
|
||||||
|
```
|
||||||
|
|
||||||
|
`ASOF JOIN` uses `equi_columnX` for joining on equality (`user_id` in our example) and `asof_column` for joining on the closest match.
|
||||||
|
|
||||||
|
For example, consider the following tables:
|
||||||
|
|
||||||
```
|
```
|
||||||
table_1 table_2
|
table_1 table_2
|
||||||
@ -556,22 +568,13 @@ event_1_2 | 13:00 | 42 event_2_3 | 13:00 | 42
|
|||||||
... ...
|
... ...
|
||||||
```
|
```
|
||||||
|
|
||||||
`ASOF JOIN` takes the timestamp of a user event from `table_1` and finds in `table_2` an event, which timestamp is closest (equal or less) to the timestamp of the event from `table_1`. In our example, `event_1_1` can be joined with the `event_2_1`, `event_1_2` can be joined with `event_2_3`, `event_2_2` cannot be joined.
|
`ASOF JOIN` takes the timestamp of a user event from `table_1` and finds an event in `table_2` where the timestamp is closest (equal or less) to the timestamp of the event from `table_1`. Herewith the `user_id` column is used for joining on equality and the `ev_time` column is used for joining on the closest match.
|
||||||
|
In our example, `event_1_1` can be joined with `event_2_1`, `event_1_2` can be joined with `event_2_3`, but `event_2_2` cannot be joined.
|
||||||
Tables for `ASOF JOIN` must have the ordered sequence column. This column cannot be alone in a table. You can use `UInt32`, `UInt64`, `Float32`, `Float64`, `Date` and `DateTime` data types for this column.
|
|
||||||
|
|
||||||
Use the following syntax for `ASOF JOIN`:
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT expression_list FROM table_1 ASOF JOIN table_2 USING(equi_column1, ... equi_columnN, asof_column)
|
|
||||||
```
|
|
||||||
|
|
||||||
`ASOF JOIN` uses `equi_columnX` for joining on equality (`user_id` in our example) and `asof_column` for joining on the closest match.
|
|
||||||
|
|
||||||
Implementation details:
|
Implementation details:
|
||||||
|
|
||||||
- The `asof_column` should be the last in the `USING` clause.
|
- `asof_column` should be last in the `USING` clause.
|
||||||
- The `ASOF` join is not supported in the [Join](../operations/table_engines/join.md) table engine.
|
- `ASOF` join is not supported in the [Join](../operations/table_engines/join.md) table engine.
|
||||||
|
|
||||||
To set the default strictness value, use the session configuration parameter [join_default_strictness](../operations/settings/settings.md#settings-join_default_strictness).
|
To set the default strictness value, use the session configuration parameter [join_default_strictness](../operations/settings/settings.md#settings-join_default_strictness).
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ ClickHouse применяет настройку в тех случаях, ко
|
|||||||
- 0 — выключена.
|
- 0 — выключена.
|
||||||
- 1 — включена.
|
- 1 — включена.
|
||||||
|
|
||||||
Значение по умолчанию: 1.
|
Значение по умолчанию — 1.
|
||||||
|
|
||||||
**Использование**
|
**Использование**
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ ClickHouse применяет настройку в тех случаях, ко
|
|||||||
- 0 — выключена.
|
- 0 — выключена.
|
||||||
- 1 — включена.
|
- 1 — включена.
|
||||||
|
|
||||||
Значение по умолчанию: 0.
|
Значение по умолчанию — 0.
|
||||||
|
|
||||||
## http_zlib_compression_level {#settings-http_zlib_compression_level}
|
## http_zlib_compression_level {#settings-http_zlib_compression_level}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ ClickHouse применяет настройку в тех случаях, ко
|
|||||||
- 0 — выключена.
|
- 0 — выключена.
|
||||||
- 1 — включена.
|
- 1 — включена.
|
||||||
|
|
||||||
Значение по умолчанию: 0.
|
Значение по умолчанию — 0.
|
||||||
|
|
||||||
## send_progress_in_http_headers {#settings-send_progress_in_http_headers}
|
## send_progress_in_http_headers {#settings-send_progress_in_http_headers}
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ ClickHouse применяет настройку в тех случаях, ко
|
|||||||
- 0 — выключена.
|
- 0 — выключена.
|
||||||
- 1 — включена.
|
- 1 — включена.
|
||||||
|
|
||||||
Значение по умолчанию: 0.
|
Значение по умолчанию — 0.
|
||||||
|
|
||||||
## input_format_allow_errors_num
|
## input_format_allow_errors_num
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ Ok.
|
|||||||
- 0 — выключена.
|
- 0 — выключена.
|
||||||
- 1 — включена.
|
- 1 — включена.
|
||||||
|
|
||||||
Значение по умолчанию: 0.
|
Значение по умолчанию — 1.
|
||||||
|
|
||||||
## input_format_skip_unknown_fields {#settings-input_format_skip_unknown_fields}
|
## input_format_skip_unknown_fields {#settings-input_format_skip_unknown_fields}
|
||||||
|
|
||||||
@ -259,7 +259,27 @@ Ok.
|
|||||||
- `ANY` — если в правой таблице несколько соответствующих строк, то соединяется только первая найденная. Если в "правой" таблице есть не более одной подходящей строки, то результаты `ANY` и `ALL` совпадают.
|
- `ANY` — если в правой таблице несколько соответствующих строк, то соединяется только первая найденная. Если в "правой" таблице есть не более одной подходящей строки, то результаты `ANY` и `ALL` совпадают.
|
||||||
- `Пустая строка` — если `ALL` или `ANY` не указаны в запросе, то ClickHouse генерирует исключение.
|
- `Пустая строка` — если `ALL` или `ANY` не указаны в запросе, то ClickHouse генерирует исключение.
|
||||||
|
|
||||||
**Значение по умолчанию**: `ALL`
|
Значение по умолчанию — `ALL`.
|
||||||
|
|
||||||
|
## join_any_take_last_row {#settings-join_any_take_last_row}
|
||||||
|
|
||||||
|
Изменяет поведение операций, выполняемых со строгостью `ANY`.
|
||||||
|
|
||||||
|
!!! warning "Внимание"
|
||||||
|
Настройка применяется только для операций `JOIN`, выполняемых над таблицами с движком [Join](../table_engines/join.md).
|
||||||
|
|
||||||
|
Возможные значения:
|
||||||
|
|
||||||
|
- 0 — если в правой таблице несколько соответствующих строк, то присоединяется только первая найденная строка.
|
||||||
|
- 1 — если в правой таблице несколько соответствующих строк, то присоединяется только последняя найденная строка.
|
||||||
|
|
||||||
|
Значение по умолчанию — 0.
|
||||||
|
|
||||||
|
**Смотрите также**
|
||||||
|
|
||||||
|
- [Секция JOIN](../../query_language/select.md#select-join)
|
||||||
|
- [Движок таблиц Join](../table_engines/join.md)
|
||||||
|
- [join_default_strictness](#settings-join_default_strictness)
|
||||||
|
|
||||||
## join_use_nulls {#settings-join_use_nulls}
|
## join_use_nulls {#settings-join_use_nulls}
|
||||||
|
|
||||||
@ -694,4 +714,3 @@ load_balancing = first_or_random
|
|||||||
- [Множественный JOIN](../../query_language/select.md#select-join)
|
- [Множественный JOIN](../../query_language/select.md#select-join)
|
||||||
|
|
||||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/operations/settings/settings/) <!--hide-->
|
[Оригинальная статья](https://clickhouse.yandex/docs/ru/operations/settings/settings/) <!--hide-->
|
||||||
|
|
||||||
|
@ -538,14 +538,49 @@ SELECT * FROM t1, t2, t3 WHERE t1.a = t2.a AND t1.a = t3.a
|
|||||||
|
|
||||||
ClickHouse не поддерживает синтаксис с запятыми напрямую и мы не рекомендуем его использовать. Алгоритм пытается переписать запрос с помощью секций `CROSS JOIN` и `INNER JOIN` и затем продолжает его выполнение. При переписывании запроса, ClickHouse пытается оптимизировать производительность и потребление памяти. По умолчанию, ClickHouse трактует запятые как `INNER JOIN` и конвертирует их в `CROSS JOIN` когда не может гарантировать, что `INNER JOIN` возвращает запрошенные данные.
|
ClickHouse не поддерживает синтаксис с запятыми напрямую и мы не рекомендуем его использовать. Алгоритм пытается переписать запрос с помощью секций `CROSS JOIN` и `INNER JOIN` и затем продолжает его выполнение. При переписывании запроса, ClickHouse пытается оптимизировать производительность и потребление памяти. По умолчанию, ClickHouse трактует запятые как `INNER JOIN` и конвертирует их в `CROSS JOIN` когда не может гарантировать, что `INNER JOIN` возвращает запрошенные данные.
|
||||||
|
|
||||||
#### ANY или ALL - строгость:
|
#### Строгость {#select-join-strictness}
|
||||||
|
|
||||||
Если указано `ALL`, то при наличии в "правой" таблице нескольких соответствующих строк, данные будут размножены по количеству этих строк. Это нормальное поведение `JOIN` как в стандартном SQL.
|
- `ALL` — если правая таблица содержит несколько подходящих строк, то ClickHouse выполняет их [декартово произведение](https://ru.wikipedia.org/wiki/Прямое_произведение). Это стандартное поведение `JOIN` в SQL.
|
||||||
Если указано `ANY`, то при наличии в "правой" таблице нескольких соответствующих строк, будет присоединена только первая попавшаяся. Если известно, что в "правой" таблице есть не более одной подходящей строки, то результаты `ANY` и `ALL` совпадают.
|
- `ANY` — если в правой таблице несколько соответствующих строк, то присоединяется только первая найденная. Если в правой таблице есть только одна подходящая строка, то результаты `ANY` и `ALL` совпадают.
|
||||||
|
- `ASOF` — для объединения последовательностей с нечётким совпадением. `ASOF JOIN` описан ниже по тексту.
|
||||||
|
|
||||||
|
**Использование ASOF JOIN**
|
||||||
|
|
||||||
|
`ASOF JOIN` применим в том случае, когда необходимо объединять записи, которые не имеют точного совпадения.
|
||||||
|
|
||||||
|
Таблицы для `ASOF JOIN` должны иметь столбец с отсортированной последовательностью. Этот столбец не может быть единственным в таблице и должен быть одного из типов: `UInt32`, `UInt64`, `Float32`, `Float64`, `Date` и `DateTime`.
|
||||||
|
|
||||||
|
Синтаксис `ASOF JOIN`:
|
||||||
|
|
||||||
|
```
|
||||||
|
SELECT expression_list FROM table_1 ASOF JOIN table_2 USING(equi_column1, ... equi_columnN, asof_column)
|
||||||
|
```
|
||||||
|
|
||||||
|
`ASOF JOIN` использует `equi_columnX` для объединения по равенству и `asof_column` для объединения по ближайшему совпадению.
|
||||||
|
|
||||||
|
Например, рассмотрим следующие таблицы:
|
||||||
|
|
||||||
|
```
|
||||||
|
table_1 table_2
|
||||||
|
event | ev_time | user_id event | ev_time | user_id
|
||||||
|
----------|---------|---------- ----------|---------|----------
|
||||||
|
... ...
|
||||||
|
event_1_1 | 12:00 | 42 event_2_1 | 11:59 | 42
|
||||||
|
... event_2_2 | 12:30 | 42
|
||||||
|
event_1_2 | 13:00 | 42 event_2_3 | 13:00 | 42
|
||||||
|
... ...
|
||||||
|
```
|
||||||
|
|
||||||
|
`ASOF JOIN` принимает метку времени пользовательского события из `table_1` и находит такое событие в `table_2` метка времени которого наиболее близка (равна или меньше) к метке времени события из `table_1`. При этом столбец `user_id` используется для объединения по равенству, а столбец `ev_time` для объединения по ближайшему совпадению. В нашем примере `event_1_1` может быть объединено с `event_2_1`, `event_1_2` может быть объединено с `event_2_3`, а `event_2_2` не объединяется.
|
||||||
|
|
||||||
|
Детали реализации:
|
||||||
|
|
||||||
|
- `asof_column` должен быть последним в секции `USING`.
|
||||||
|
- `ASOF JOIN` не поддержан для движка таблиц [Join](../operations/table_engines/join.md).
|
||||||
|
|
||||||
Чтобы задать значение строгости по умолчанию, используйте сессионный параметр [join_default_strictness](../operations/settings/settings.md#settings-join_default_strictness).
|
Чтобы задать значение строгости по умолчанию, используйте сессионный параметр [join_default_strictness](../operations/settings/settings.md#settings-join_default_strictness).
|
||||||
|
|
||||||
**GLOBAL JOIN**
|
#### GLOBAL JOIN
|
||||||
|
|
||||||
При использовании обычного `JOIN` , запрос отправляется на удалённые серверы. На каждом из них выполняются подзапросы для формирования "правой" таблицы, и с этой таблицей выполняется соединение. То есть, "правая" таблица формируется на каждом сервере отдельно.
|
При использовании обычного `JOIN` , запрос отправляется на удалённые серверы. На каждом из них выполняются подзапросы для формирования "правой" таблицы, и с этой таблицей выполняется соединение. То есть, "правая" таблица формируется на каждом сервере отдельно.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user