aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/docs/ru/syntax/select/unique_distinct_hints.md
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;
```