Skip to content

Commit b983fcc

Browse files
Rewrite YQL DML (#6470)
Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent 5e95651 commit b983fcc

File tree

11 files changed

+73
-17
lines changed

11 files changed

+73
-17
lines changed
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
{% note warning %}
1+
{% if backend_name == "YDB" %}
2+
3+
{% note alert %}
24

35
{% include [not_allow_for_olap_text](not_allow_for_olap_text.md) %}
46

5-
{% endnote %}
7+
{% endnote %}
8+
9+
{% endif %}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Доступные способы загрузки данных в колоночные таблицы:
2+
* [YDB CLI](../reference/ydb-cli/export-import/import-file.md)
3+
* [Пакетная вставка данных](../recipes/ydb-sdk/bulk-upsert.md)
4+
* [FluentBit](../integrations/fluent-bit.md)
5+
* [Yandex Data Transfer](https://yandex.cloud/ru/services/data-transfer)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ EnsureConvertibleTo(T, Type<T>, String)->T
2121
2. В Ensure — булевый предикат, который проверяется на `true`. В остальных функциях — тип данных, который может быть получен через [предназначенные для этого функции](../../types.md), либо строковый литерал с [текстовым описанием типа](../../../types/type_string.md).
2222
3. Опциональная строка с комментарием к ошибке, которая попадет в общее сообщение об ошибке при завершении запроса. Для проверок типов не может использовать сами данные, так как они выполняются на этапе валидации запроса, а для Ensure — может быть произвольным выражением.
2323

24+
{% if backend_name != "YDB" %}
25+
2426
Для проверки условий по финальному результату вычисления Ensure удобно использовать в сочетании с [DISCARD SELECT](../../../syntax/discard.md).
2527

28+
{% endif %}
29+
2630
**Примеры**
2731
``` yql
2832
SELECT Ensure(

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
# DELETE FROM
22

3-
Удаляет строки из таблицы, заданные с помощью условия `WHERE`.{% if feature_mapreduce %} Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %}
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+
Вместо `DELETE FROM` для удаления данных из колоночных таблиц можно воспользоваться механизмом удаления строк по времени — [TTL](../../../../concepts/ttl.md). TTL можно задать при [создании](../create_table.md) таблицы через `CREATE TABLE` или [измененить позже](../alter_table.md) через `ALTER TABLE`.
10+
11+
{% endnote %}
12+
13+
{% endif %}
14+
15+
Удаляет строки из строковой таблицы, подходящие под условия, заданные в `WHERE`.{% if feature_mapreduce %} Таблица ищется по имени в базе данных, заданной оператором [USE](../use.md).{% endif %}
416

517
**Пример**
618

@@ -11,10 +23,12 @@ WHERE Key1 == 1 AND Key2 >= "One";
1123

1224
## DELETE FROM ... ON {#delete-on}
1325

26+
1427
Используется для удаления данных на основе результатов подзапроса. Набор колонок, возвращаемых подзапросом, должен быть подмножеством колонок обновляемой таблицы, и в составе возвращаемых колонок обязательно должны присутствовать все колонки первичного ключа таблицы. Типы данных возвращаемых подзапросом колонок должны совпадать с типами данных соответствующих колонок таблицы.
1528

1629
Для поиска удаляемых из таблицы записей используется значение первичного ключа. Присутствие других (неключевых) колонок таблицы в составе выходных колонок подзапроса не влияет на результаты операции удаления.
1730

31+
1832
**Пример**
1933

2034
```sql

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

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

77
{% include [OLAP_not_allow_text](../../../../_includes/not_allow_for_olap_text.md) %}
88

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 %}
9+
{% include [OLAP_not_allow_text](../../../../_includes/ways_add_data_to_olap.md) %}
1610

1711
{% endnote %}
1812

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/index.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 %}. {% if backend_name != "YDB" %}Не может быть задано одновременно с [DISCARD](../discard.md).{% endif %}
44

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

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
# REPLACE INTO
22

3-
Сохраняет данные в таблицу с перезаписью строк по первичному ключу.{% if feature_mapreduce %} Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %} Если заданный первичный ключ отсутствует, в таблицу будет добавлена новая строка. Если задан существующий `PRIMARY_KEY`, строка будет перезаписана. При этом значения столбцов, не участвующих в операции, заменяются на значения по умолчанию.
3+
{% if backend_name == "YDB" %}
44

5-
{% note info %}
5+
{% note warning %}
66

7-
В отличие от [`INSERT INTO`](../insert_into.md) и [`UPDATE`](../update.md), запросы [`UPSERT INTO`](../upsert_into.md) и `REPLACE INTO` не требуют предварительного чтения данных, поэтому выполняются быстрее.
7+
{% include [OLAP_not_allow_text](../../../../_includes/not_allow_for_olap_text.md) %}
8+
9+
{% include [OLAP_not_allow_text](../../../../_includes/ways_add_data_to_olap.md) %}
810

911
{% endnote %}
1012

13+
{% endif %}
14+
15+
В отличие от [`INSERT INTO`](../insert_into.md) и [`UPDATE`](../update.md), запросы [`UPSERT INTO`](../upsert_into.md) и `REPLACE INTO` не требуют предварительного чтения данных, поэтому выполняются быстрее. `REPLACE INTO` сохраняет данные в {% if backend_name == "YDB" %}строковую таблицу{% else %}таблицу{% endif %} с перезаписью строк по первичному ключу.{% if feature_mapreduce %} Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %} Если заданный первичный ключ отсутствует, в таблицу будет добавлена новая строка. Если задан существующий `PRIMARY_KEY`, строка будет перезаписана. При этом значения столбцов, не участвующих в операции, заменяются на значения по умолчанию.
16+
17+
1118
* Задание значений для `REPLACE INTO` c помощью `VALUES`.
1219

1320
**Пример**

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,23 @@
11
# UPDATE
22

3-
Изменяет данные в таблице.{% if feature_mapreduce %} Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %} После ключевого слова `SET` указываются столбцы, значение которых необходимо заменить, и сами новые значения. Список строк задается с помощью условия `WHERE`. Если `WHERE` отсутствует, изменения будут применены ко всем строкам таблицы.
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+
{% include [OLAP_not_allow_text](../../../../_includes/ways_add_data_to_olap.md) %}
10+
11+
{% endnote %}
12+
13+
{% endif %}
414

515
`UPDATE` не может менять значение колонок, входящих в состав первичного ключа.
616

17+
Изменяет данные в строковой таблице.{% if feature_mapreduce %} Таблица по имени ищется в базе данных, заданной оператором [USE](../use.md).{% endif %} После ключевого слова `SET` указываются столбцы, значение которых необходимо заменить, и сами новые значения. Список строк задается с помощью условия `WHERE`. Если `WHERE` отсутствует, изменения будут применены ко всем строкам таблицы.
18+
19+
`UPDATE` не может менять значение `PRIMARY_KEY`.
20+
721
**Пример**
822

923
```sql

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
# UPSERT INTO
22

3-
UPSERT (расшифровывается как UPDATE or INSERT) обновляет или добавляет множество строк в таблице на основании сравнения по первичному ключу. Отсутствующие строки добавляются. В присутствующих строках обновляются значения заданных столбцов, значения остальных столбцов остаются неизменными.
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+
{% include [OLAP_not_allow_text](../../../../_includes/ways_add_data_to_olap.md) %}
10+
11+
{% endnote %}
12+
13+
{% endif %}
14+
15+
UPSERT (расшифровывается как UPDATE or INSERT) обновляет или добавляет множество строк в строковой таблице на основании сравнения по первичному ключу. Отсутствующие строки добавляются. В присутствующих строках обновляются значения заданных столбцов, значения остальных столбцов остаются неизменными.
416

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

ydb/docs/ru/core/yql/reference/yql-core/syntax/index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
{% if feature_mapreduce and process_command == "PROCESS" %}
3636
* [SUBQUERY](subquery.md)
3737
{% endif %}
38+
{% if backend_name != "YDB" %}
3839
* [DISCARD](discard.md)
40+
{% endif %}
3941
* [INTO RESULT](into_result.md)
4042
{% if feature_mapreduce %}
4143
{% if process_command == "PROCESS" %}

0 commit comments

Comments
 (0)