This commit is contained in:
Sergei Bocharov 2019-11-25 12:35:25 +03:00
parent ff5cb84d72
commit 39ddd0ba5d
3 changed files with 65 additions and 71 deletions

View File

@ -625,7 +625,6 @@ Returns range from the index, in which given condition is true.
Type: [Uint8](https://clickhouse.yandex/docs/en/data_types/int_uint/#diapazony-uint). Type: [Uint8](https://clickhouse.yandex/docs/en/data_types/int_uint/#diapazony-uint).
**Example** **Example**
Here is the example of test data from the table [ontime](../../getting_started/example_datasets/ontime.md). Here is the example of test data from the table [ontime](../../getting_started/example_datasets/ontime.md).
@ -685,7 +684,7 @@ Result:
└────────────┴─────────┘ └────────────┴─────────┘
``` ```
Wrap the expression `k = '2017-09-15'` into `indexHint` function. Now wrap the expression `k = '2017-09-15'` into `indexHint` function.
Query: Query:

View File

@ -1,4 +1,3 @@
# OnTime # OnTime
Этот датасет может быть получен двумя способами: Этот датасет может быть получен двумя способами:
@ -8,7 +7,7 @@
## Импорт из сырых данных ## Импорт из сырых данных
Скачивание данных: Скачивание данных (из `https://github.com/Percona-Lab/ontime-airline-performance/blob/master/download.sh`):
```bash ```bash
for s in `seq 1987 2018` for s in `seq 1987 2018`
@ -20,8 +19,6 @@ done
done done
``` ```
(из <https://github.com/Percona-Lab/ontime-airline-performance/blob/master/download.sh> )
Создание таблицы: Создание таблицы:
```sql ```sql

View File

@ -587,108 +587,106 @@ SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
Возвращает все данные из диапазона, в который попадают данные, соответствующие указанному выражению. Возвращает все данные из диапазона, в который попадают данные, соответствующие указанному выражению.
Переданное выражение не будет вычислено. Выбор диапазона производится по индексу. Переданное выражение не будет вычислено. Выбор диапазона производится по индексу.
Индекс в ClickHouse разреженный, при чтении диапазона в ответ попадают "лишние" данные. Индекс в ClickHouse разреженный, при чтении диапазона в ответ попадают «лишние» соседние данные.
**Синтаксис** **Синтаксис**
```sql ```sql
SELECT * FROM table WHERE indexHint(<expression>) SELECT * FROM table WHERE indexHint(<expression>)
``` ```
**Возвращаемое значение** **Возвращаемое значение**
Возвращает диапазон индекса, в котором выполняется заданное условие. Возвращает диапазон индекса, в котором выполняется заданное условие.
Тип: [Uint8](https://clickhouse.yandex/docs/ru/data_types/int_uint/#diapazony-uint). Тип: [Uint8](https://clickhouse.yandex/docs/ru/data_types/int_uint/#diapazony-uint).
**Пример** **Пример**
Рассмотрим пример с использованием тестовых данных таблицы [ontime](../../getting_started/example_datasets/ontime.md). Рассмотрим пример с использованием тестовых данных таблицы [ontime](../../getting_started/example_datasets/ontime.md).
Исходная таблица: Исходная таблица:
```sql ```sql
SELECT count() FROM ontime SELECT count() FROM ontime
``` ```
```text ```text
┌─count()─┐ ┌─count()─┐
│ 4276457 │ │ 4276457 │
└─────────┘ └─────────┘
``` ```
В таблице есть индексы по полям `(FlightDate, (Year, FlightDate))`. В таблице есть индексы по полям `(FlightDate, (Year, FlightDate))`.
Выполним выборку по дате, где индекс не используется. Выполним выборку по дате, где индекс не используется.
Запрос: Запрос:
```sql ```sql
SELECT FlightDate AS k, count() FROM ontime GROUP BY k ORDER BY k SELECT FlightDate AS k, count() FROM ontime GROUP BY k ORDER BY k
``` ```
ClickHouse обработал всю таблицу (`Processed 4.28 million rows`). ClickHouse обработал всю таблицу (`Processed 4.28 million rows`).
Результат: Результат:
```text ```text
┌──────────k─┬─count()─┐ ┌──────────k─┬─count()─┐
│ 2017-01-01 │ 13970 │ │ 2017-01-01 │ 13970 │
│ 2017-01-02 │ 15882 │ │ 2017-01-02 │ 15882 │
........................ ........................
│ 2017-09-28 │ 16411 │ │ 2017-09-28 │ 16411 │
│ 2017-09-29 │ 16384 │ │ 2017-09-29 │ 16384 │
│ 2017-09-30 │ 12520 │ │ 2017-09-30 │ 12520 │
└────────────┴─────────┘ └────────────┴─────────┘
``` ```
Для подключения индекса выбираем конкретную дату. Для подключения индекса выбираем конкретную дату.
Запрос: Запрос:
```sql ```sql
SELECT FlightDate AS k, count() FROM ontime WHERE k = '2017-09-15' GROUP BY k ORDER BY k SELECT FlightDate AS k, count() FROM ontime WHERE k = '2017-09-15' GROUP BY k ORDER BY k
``` ```
При использовании индекса ClickHouse обработал значительно меньшее количество строк (`Processed 32.74 thousand rows`). При использовании индекса ClickHouse обработал значительно меньшее количество строк (`Processed 32.74 thousand rows`).
Результат: Результат:
```text ```text
┌──────────k─┬─count()─┐ ┌──────────k─┬─count()─┐
│ 2017-09-15 │ 16428 │ │ 2017-09-15 │ 16428 │
└────────────┴─────────┘ └────────────┴─────────┘
``` ```
В функцию `indexHint` передаем выражение `k = '2017-09-15'`. Передадим в функцию `indexHint` выражение `k = '2017-09-15'`.
Запрос: Запрос:
```sql ```sql
SELECT SELECT
FlightDate AS k, FlightDate AS k,
count() count()
FROM ontime FROM ontime
WHERE indexHint(k = '2017-09-15') WHERE indexHint(k = '2017-09-15')
GROUP BY k GROUP BY k
ORDER BY k ASC ORDER BY k ASC
``` ```
ClickHouse применил индекс по аналогии с примером выше (`Processed 32.74 thousand rows`). ClickHouse применил индекс по аналогии с примером выше (`Processed 32.74 thousand rows`).
Выражение `k = '2017-09-15'` не используется при формировании результата. Выражение `k = '2017-09-15'` не используется при формировании результата.
В примере функция `indexHint` позволяет увидеть соседние даты. Функция `indexHint` позволяет увидеть соседние данные.
Результат: Результат:
```text ```text
┌──────────k─┬─count()─┐ ┌──────────k─┬─count()─┐
│ 2017-09-14 │ 7071 │ │ 2017-09-14 │ 7071 │
│ 2017-09-15 │ 16428 │ │ 2017-09-15 │ 16428 │
│ 2017-09-16 │ 1077 │ │ 2017-09-16 │ 1077 │
│ 2017-09-30 │ 8167 │ │ 2017-09-30 │ 8167 │
└────────────┴─────────┘ └────────────┴─────────┘
``` ```
## replicate {#other_functions-replicate} ## replicate {#other_functions-replicate}