---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/select/unique_distinct_hints.md?version=v25.3
  - https://ydb.tech/docs/ru/yql/reference/syntax/select/unique_distinct_hints.md?version=v25.3
  - href: ru/yql/reference/syntax/select/unique_distinct_hints.md
    type: text/markdown
    title: Markdown version
  - href: ../../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/yql/reference/syntax/select/unique_distinct_hints.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# UNIQUE DISTINCT hints

Непосредственно после `SELECT` возможно добавить [SQL хинты](https://ydb.tech/docs/ru/yql/reference/syntax/lexer.md?version=v25.3#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;
```
