diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-09-11 12:05:32 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-09-11 12:26:56 +0300 |
commit | 8a55588984e2afd906e301df0f471d50b08914c9 (patch) | |
tree | 51eec3b1d1a0478dfc0815a5d1daa05dd64595f2 | |
parent | f7014dce27f776085607cadfc5fcfc031e4229c1 (diff) | |
download | ydb-8a55588984e2afd906e301df0f471d50b08914c9.tar.gz |
YQL-13585 Doc for unique/distinct hints.
3 files changed, 27 insertions, 9 deletions
diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/lexer.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/lexer.md index 62c0ad251c..e402623639 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/lexer.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/lexer.md @@ -9,7 +9,7 @@ ## Режимы совместимости синтаксиса {#lexer-modes} -Поддерживаются два режима совместимости синтаксиса: +Поддерживаются два режима совместимости синтаксиса: * Расширенный C++ (по-умолчанию) * ANSI SQL @@ -83,7 +83,7 @@ SQL хинты – это специальные настройки, котор (например, включать/выключать определенные оптимизации, форсировать стратегию JOIN-а и т.п.). В отличие от [PRAGMA](../pragma.md), SQL хинты обладают локальным действием – они привязаны к определенной точке YQL запроса (обычно следуют после ключевого слова) и влияют только на соответствующий statement или даже его часть. -SQL хинты представляют собой набор настроек "имя-список значений" и задаются внутри комментариев специального вида – +SQL хинты представляют собой набор настроек "имя-список значений" и задаются внутри комментариев специального вида – первым символом комментария с SQL хинтами должен быть `+`: ```sql --+ Name1(Value1 Value2 Value3) Name2(Value4) ... @@ -108,13 +108,6 @@ SQL хинты представляют собой набор настроек " --+ foo('value with single quote '' inside') ``` -При наличии в списке хинтов двух (и более) хинтов с одинаковыми именами используется последний: -```sql ---+ foo(v1 v2) bar(v3) foo() --- эквивалетно ---+ bar(v3) foo() -``` - Неизвестные имена SQL хинтов (либо синтаксически некорректные хинты) никогда не вызывают ошибок – они просто игнорируется: ```sql --+ foo(value1) bar(value2 baz(value3) diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/select/unique_distinct_hints.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/select/unique_distinct_hints.md new file mode 100644 index 0000000000..f9a6bb7251 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/select/unique_distinct_hints.md @@ -0,0 +1,23 @@ +## UNIQUE DISTINCT hints {#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; +``` diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/select.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/select.md index 702897a231..692edf672b 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/select.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/select.md @@ -26,6 +26,8 @@ {% include [x](_includes/select/distinct.md) %} +{% include [x](_includes/select/unique_distinct_hints.md) %} + {% include [x](_includes/select/execution.md) %} {% include [x](_includes/select/column_order.md) %} |