Skip to content

Commit 14889d9

Browse files
Pseudolukianblinkov
authored andcommitted
YDBDOCS-517: refactoring YQL SELECT for YDB (ydb-platform#5995)
Co-authored-by: Ivan Blinkov <[email protected]>
1 parent aeadbba commit 14889d9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+563
-88
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% note warning %}
2+
3+
{% include [not_allow_for_olap_text](not_allow_for_olap_text.md) %}
4+
5+
{% endnote %}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Поддерживается только для [строковых](../concepts/datamodel/table.md#strokovye-tablicy) таблиц. Поддержка функциональности для [колоночных](../concepts/datamodel/table.md#column-tables) таблиц находится в разработке.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
## Получение выборки данных {#query-processing}
22

3-
Выполняется запрос на получение выборки данных с использованием команды [`SELECT`](../../../../yql/reference/syntax/select.md) языка запросов [YQL](../../../../yql/reference/index.md). Демонстрируется обработка полученной выборки в приложении.
3+
Выполняется запрос на получение выборки данных с использованием команды [`SELECT`](../../../../yql/reference/syntax/select/index.md) языка запросов [YQL](../../../../yql/reference/index.md). Демонстрируется обработка полученной выборки в приложении.

ydb/docs/ru/core/dev/yql-tutorial/select_all_columns.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Выборка данных из всех колонок
22

3-
Выберите все колонки из таблицы с помощью оператора [SELECT](../../yql/reference/syntax/select.md).
3+
Выберите все колонки из таблицы с помощью оператора [SELECT](../../yql/reference/syntax/select/index.md).
44

55
{% include [yql-reference-prerequisites](_includes/yql_tutorial_prerequisites.md) %}
66

ydb/docs/ru/core/yql/reference/yql-core/builtins/_includes/basic/evaluate_expr_atom.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## EvaluateExpr, EvaluateAtom {#evaluate_expr_atom}
22

3-
Возможность выполнить выражение до начала основного расчета и подставить его результат в запрос как литерал (константу). Во многих контекстах, где в стандартном SQL ожидалась бы только константа (например, в именах таблиц, количестве строк в [LIMIT](../../../syntax/select.md#limit) и т.п.) этот функционал активируется неявным образом автоматически.
3+
Возможность выполнить выражение до начала основного расчета и подставить его результат в запрос как литерал (константу). Во многих контекстах, где в стандартном SQL ожидалась бы только константа (например, в именах таблиц, количестве строк в [LIMIT](../../../syntax/select/limit_offset.md) и т.п.) этот функционал активируется неявным образом автоматически.
44

55
EvaluateExpr может использоваться в тех местах, где грамматикой уже ожидается выражение. Например, с его помощью можно:
66

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/discard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DISCARD
22

3-
Вычисляет {% if select_command == "SELECT STREAM" %}[`SELECT STREAM`](../select_stream.md){% else %}[`SELECT`](../select.md){% endif %}{% if feature_mapreduce %}{% if reduce_command %}, [`{{ reduce_command }}`](../reduce.md){% endif %} или [`{{ process_command }}`](../process.md){% endif %}, но не возвращает результат ни в клиент, ни в таблицу. {% if feature_mapreduce %}Не может быть задано одновременно с [INTO RESULT](../into_result.md).{% endif %}
3+
Вычисляет {% if select_command == "SELECT STREAM" %}[`SELECT STREAM`](../select_stream.md){% else %}[`SELECT`](../select/index.md){% endif %}{% if feature_mapreduce %}{% if reduce_command %}, [`{{ reduce_command }}`](../reduce.md){% endif %} или [`{{ process_command }}`](../process.md){% endif %}, но не возвращает результат ни в клиент, ни в таблицу. {% if feature_mapreduce %}Не может быть задано одновременно с [INTO RESULT](../into_result.md).{% endif %}
44

55
Полезно использовать в сочетании с [`Ensure`](../../builtins/basic.md#ensure) для проверки выполнения пользовательских условий на финальный результат вычислений.
66

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/expressions/lambda.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
Область видимости для тела lambda — сначала локальные именованные выражения, затем аргументы, затем именованные выражения, определенные выше lambda на верхнем уровне запроса.
88

9-
В теле lambda можно использовать только чистые выражения — в том числе другие lambda, возможно, переданные через аргументы. Но нельзя использовать [SELECT](../../select.md), [INSERT INTO](../../insert_into.md) и прочие выражения верхнего уровня.
9+
В теле lambda можно использовать только чистые выражения — в том числе другие lambda, возможно, переданные через аргументы. Но нельзя использовать [SELECT](../../select/index.md), [INSERT INTO](../../insert_into.md) и прочие выражения верхнего уровня.
1010

1111
Один или более последних параметров lambda могут быть помечены вопросиком как необязательные — если они не были указаны при вызове lambda, то им будет присвоено значение `NULL`.
1212

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/expressions/tables.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
{% endif %}
99

1010
Семантика табличного выражения зависит от контекста в котором оно используется. В YQL табличные выражения могут применяться в следующих контекстах:
11-
* табличный контекст - после [FROM](../../select.md#from).
11+
* табличный контекст - после [FROM](../../select/from.md).
1212
Здесь табличные выражения работают как ожидается – например `$input = SELECT a, b, c FROM T; SELECT * FROM $input` вернет таблицу с тремя колонками.
13-
Табличный контекст также возникает после [UNION ALL](../../select.md#unionall){% if feature_join %}, [JOIN](../../join.md#join){% endif %}{% if feature_mapreduce and process_command == "PROCESS" %}, [PROCESS](../../process.md#process), [REDUCE](../../reduce.md#reduce){% endif %};
13+
Табличный контекст также возникает после [UNION ALL](../../select/index.md#unionall){% if feature_join %}, [JOIN](../../join.md#join){% endif %}{% if feature_mapreduce and process_command == "PROCESS" %}, [PROCESS](../../process.md#process), [REDUCE](../../reduce.md#reduce){% endif %};
1414
* векторный контекст - после [IN](#in). В этом контексте табличное выражение обязано содержать ровно одну колонку (имя этой колонки никак не влияет на результат выражения).
1515
Табличное выражение в векторном контексте типизируется как список (тип элемента списка при этом совпадает с типом колонки). Пример: `SELECT * FROM T WHERE key IN (SELECT k FROM T1)`;
1616
* скалярный контекст возникает _во всех остальных случаях_. Как и в векторном контексте,

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/group_by/distinct.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
{% note info %}
66

7-
Применение `DISTINCT` к вычислимым значениям на данный момент не реализовано. С этой целью можно использовать [подзапрос](../../select.md#from) или выражение `GROUP BY ... AS ...`.
7+
Применение `DISTINCT` к вычислимым значениям на данный момент не реализовано. С этой целью можно использовать [подзапрос](../../select/from.md) или выражение `GROUP BY ... AS ...`.
88

99
{% endnote %}
1010

@@ -20,5 +20,5 @@ ORDER BY count DESC
2020
LIMIT 3;
2121
```
2222

23-
Также ключевое слово `DISTINCT` может использоваться для выборки уникальных строк через [`SELECT DISTINCT`](../../select.md#distinct).
23+
Также ключевое слово `DISTINCT` может использоваться для выборки уникальных строк через [`SELECT DISTINCT`](../../select/distinct.md).
2424

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/group_by/general.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,6 @@ GROUP BY
6262

6363
{% note warning "Внимание" %}
6464

65-
Возможность указывать имя для колонки или выражения в `GROUP BY .. AS foo` является расширением YQL. Такое имя становится видимым в `WHERE` несмотря на то, что фильтрация по `WHERE` выполняется [раньше](../../select.md#selectexec) группировки. В частности, если в таблице `T` есть две колонки `foo` и `bar`, то в запросе `SELECT foo FROM T WHERE foo > 0 GROUP BY bar AS foo` фильтрация фактически произойдет по колонке `bar` из исходной таблицы.
65+
Возможность указывать имя для колонки или выражения в `GROUP BY .. AS foo` является расширением YQL. Такое имя становится видимым в `WHERE` несмотря на то, что фильтрация по `WHERE` выполняется [раньше](../../select/index.md#selectexec) группировки. В частности, если в таблице `T` есть две колонки `foo` и `bar`, то в запросе `SELECT foo FROM T WHERE foo > 0 GROUP BY bar AS foo` фильтрация фактически произойдет по колонке `bar` из исходной таблицы.
6666

6767
{% endnote %}

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/group_by/having.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## HAVING {#having}
22

3-
Фильтрация выборки `SELECT` по результатам вычисления [агрегатных функций](../../../builtins/aggregation.md). Синтаксис аналогичен конструкции [`WHERE`](../../select.md#where).
3+
Фильтрация выборки `SELECT` по результатам вычисления [агрегатных функций](../../../builtins/aggregation.md). Синтаксис аналогичен конструкции [`WHERE`](../../select/where.md).
44

55
**Пример**
66

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/insert_into.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
11
# INSERT INTO
2+
3+
{% if backend_name == "YDB" %}
4+
5+
{% note warning %}
6+
7+
{% include [OLAP_not_allow_text](../../../../_includes/not_allow_for_olap_text.md) %}
8+
9+
{% cut "Способы загрузки данных в колоночные таблицы" %}
10+
* [YDB CLI](../../../../reference/ydb-cli/export-import/import-file.md)
11+
* [Пакетная вставка данных](../../../../recipes/ydb-sdk/bulk-upsert.md)
12+
* [FluentBit](../../../../integrations/fluent-bit.md)
13+
* [Yandex Data Transfer](https://yandex.cloud/ru/services/data-transfer)
14+
15+
{% endcut %}
16+
17+
{% endnote %}
18+
19+
{% endif %}
20+
221
{% if select_command != "SELECT STREAM" %}
3-
Добавляет строки в таблицу. {% if feature_bulk_tables %} Если целевая таблица уже существует и не является сортированной, операция `INSERT INTO` дописывает строки в конец таблицы. В случае сортированной таблицы, YQL пытается сохранить сортированность путем запуска сортированного слияния. {% endif %}{% if feature_map_tables %} При попытке вставить в таблицу строку с уже существующим значением первичного ключа операция завершится ошибкой с кодом `PRECONDITION_FAILED` и текстом `Operation aborted due to constraint violation: insert_pk`.{% endif %}
22+
Добавляет строки в {% if backend_name == "YDB" %}строковую{% endif %} таблицу. {% if feature_bulk_tables %} Если целевая таблица уже существует и не является сортированной, операция `INSERT INTO` дописывает строки в конец таблицы. В случае сортированной таблицы, YQL пытается сохранить сортированность путем запуска сортированного слияния. {% endif %}{% if feature_map_tables %} При попытке вставить в таблицу строку с уже существующим значением первичного ключа операция завершится ошибкой с кодом `PRECONDITION_FAILED` и текстом `Operation aborted due to constraint violation: insert_pk`.{% endif %}
423

524
{% if feature_mapreduce %}Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %}
625

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/into_result.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# INTO RESULT
22

3-
Позволяет задать пользовательскую метку для [SELECT](../select.md){% if feature_mapreduce and process_command == "PROCESS" %}, [PROCESS](../process.md) или [REDUCE](../reduce.md){% endif %}. Не может быть задано одновременно с [DISCARD](../discard.md).
3+
Позволяет задать пользовательскую метку для [SELECT](../select/index.md){% if feature_mapreduce and process_command == "PROCESS" %}, [PROCESS](../process.md) или [REDUCE](../reduce.md){% endif %}. Не может быть задано одновременно с [DISCARD](../discard.md).
44

55
**Примеры:**
66

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/pragma/global.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
| --- | --- |
77
| Флаг | false |
88

9-
Автоматически выполнять [COMMIT](../../select.md#commit) после каждого выражения.
9+
Автоматически выполнять [COMMIT](../../select/index.md#commit) после каждого выражения.
1010

1111
### TablePathPrefix {#table-path-prefix}
1212

@@ -105,7 +105,7 @@ EACH использует [TablePathPrefix](#table-path-prefix) для кажд
105105

106106
При использовании `SELECT foo.* FROM ... AS foo` убрать префикс `foo.` у имен результирующих колонок.
107107

108-
Работает в том числе и для [JOIN](../../join.md), но в этом случае имеет право упасть в случае конфликта имен (который можно разрешить с помощью [WITHOUT](../../select.md#without) и переименования колонок). Для JOIN в режиме SimpleColumns производится неявный Coalesce для ключевых колонок: запрос `SELECT * FROM T1 AS a JOIN T2 AS b USING(key)` в режиме SimpleColumns работает как `SELECT a.key ?? b.key AS key, ... FROM T1 AS a JOIN T2 AS b USING(key)`
108+
Работает в том числе и для [JOIN](../../join.md), но в этом случае имеет право упасть в случае конфликта имен (который можно разрешить с помощью [WITHOUT](../../select/without.md) и переименования колонок). Для JOIN в режиме SimpleColumns производится неявный Coalesce для ключевых колонок: запрос `SELECT * FROM T1 AS a JOIN T2 AS b USING(key)` в режиме SimpleColumns работает как `SELECT a.key ?? b.key AS key, ... FROM T1 AS a JOIN T2 AS b USING(key)`
109109

110110
### CoalesceJoinKeysOnQualifiedAll
111111

@@ -170,11 +170,11 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
170170
### OrderedColumns {#orderedcolumns}
171171
`OrderedColumns` / `DisableOrderedColumns`
172172

173-
Выводить [порядок колонок](../../select.md#orderedcolumns) в SELECT/JOIN/UNION ALL и сохранять его при записи результатов. По умолчанию порядок колонок не определен.
173+
Выводить [порядок колонок](../../select/index.md#orderedcolumns) в SELECT/JOIN/UNION ALL и сохранять его при записи результатов. По умолчанию порядок колонок не определен.
174174

175175
### PositionalUnionAll {#positionalunionall}
176176

177-
Включить соответствующий стандарту поколоночный режим выполнения [UNION ALL](../../select.md#unionall). При этом автоматически включается
177+
Включить соответствующий стандарту поколоночный режим выполнения [UNION ALL](../../select/index.md#unionall). При этом автоматически включается
178178
[упорядоченность колонок](#orderedcolumns).
179179

180180
### RegexUseRe2

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/select/assume_order_by.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
## ASSUME ORDER BY
2+
# ASSUME ORDER BY
33

44
Проверка сортированности результата `SELECT` по значению в указанном столбце или нескольких столбцах. Результат такого `SELECT`-а будет считаться сортированным, но без выполнения фактической сортировки. Проверка сортированности осуществляется на этапе исполнения запроса.
55

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/select/calc.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## SELECT
1+
# SELECT
22

33
Возвращает результат вычисления выражений, указанных после `SELECT`.
44

0 commit comments

Comments
 (0)