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).
**Example**
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:

View File

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

View File

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