blob: 8346499857575d5cdaf814da5053db4bed15e995 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# UNIQUE DISTINCT hints
Непосредственно после `SELECT` возможно добавить [SQL хинты](../lexer.md#sql-hints) `unique` или `distinct`, которые заявляют, что эта проекция порождает данные, содержащие уникальные значения в указанном наборе колонок таблицы. Это может, использоваться для оптимизации следующих подзапросов, выполняющихся над этой проекцией, или для записи в мета-атрибуты таблицы при `INSERT`.
* Колонки указываются в значениях хинта через пробел.
* Если набор колонок не задан, значит уникальность распространяется на полный набор колонок этой проекции.
* `unique` - означает уникальные либо `null` значения. По стандарту SQL каждый null уникален: NULL = NULL -> NULL
* `distinct` - означает полностью уникальные значение включая `null`: NULL IS DISTINCT FROM NULL -> FALSE
* Можно указать несколько наборов колонок в нескольких хинтах у одной проекции.
* Если хинт содержит колонку, которой нет в проекции, он будет проигнорирован.
## Примеры
```yql
SELECT /*+ unique() */ * FROM Input;
SELECT /*+ distinct() */ * FROM Input;
SELECT /*+ distinct(key subkey) */ * FROM Input;
SELECT /*+ unique(key) distinct(subkey value) */ * FROM Input;
-- Missed column - ignore hint.
SELECT /*+ unique(subkey value) */ key, value FROM Input;
```
|