aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBulat Gayazov <brgayazov@yandex-team.ru>2023-09-22 15:31:51 +0300
committerbrgayazov <bulat@ydb.tech>2023-09-22 16:19:07 +0300
commit7ec97fcd8f0fa5020cedb64d7eeb202b67d0f2bb (patch)
treeea559c889179954e9ff1d0a5c62a9d11057da146
parent43a874265ed8f1a3de511b744da423efa8850f7c (diff)
downloadydb-7ec97fcd8f0fa5020cedb64d7eeb202b67d0f2bb.tar.gz
Added csv/tsv yql params description to docs
Added csv/tsv yql params description to docs Pull Request resolved: 342
-rw-r--r--ydb/docs/ru/core/_includes/parameterized-query.md8
-rw-r--r--ydb/docs/ru/core/reference/ydb-cli/parameterized-queries-cli.md196
2 files changed, 165 insertions, 39 deletions
diff --git a/ydb/docs/ru/core/_includes/parameterized-query.md b/ydb/docs/ru/core/_includes/parameterized-query.md
index fcc3da13b23..8bf79a00842 100644
--- a/ydb/docs/ru/core/_includes/parameterized-query.md
+++ b/ydb/docs/ru/core/_includes/parameterized-query.md
@@ -3,9 +3,11 @@
Имя | Описание
---|---
`-p, --param` | Значение одного параметра YQL-запроса в формате `$name=value`, где `$name` — имя параметра, а `value` — его значение (корректный [JSON value](https://www.json.org/json-ru.html)).
-`--param-file` | Имя файла в формате [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %} в кодировке [UTF-8]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/UTF-8){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/UTF-8){% endif %}, в котором заданы значения параметров, сопоставляемые с параметрами YQL-запроса по именам ключей.
-`--input-format` | Формат представления значений параметров. Действует на все способы их передачи (через параметр команды, файл или `stdin`).<br>Возможные значения:<ul><li>`json-unicode` (по умолчанию) — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}.</li><li>`json-base64` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}, в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Base64){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/Base64){% endif %}.</li></ul>
-`--stdin-format` | Формат представления параметров и фрейминг для `stdin`. Чтобы задать оба значения, укажите параметр дважды.<br>**Формат представления параметров на `stdin`**<br>Возможные значения:<ul><li>`json-unicode` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}.</li><li>`json-base64` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}, в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Base64){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/Base64){% endif %}.</li><li>`raw` - бинарные данные, имя параметра задается опцией `--stdin-par`.</li></ul>Если формат представления параметров на `stdin` не задан, то применяется формат, заданный параметром `--input-format`.<br><br>**Разделение наборов параметров (фрейминг) для `stdin`**<br>Возможные значения:<ul><li>`no-framing` (по умолчанию) — фрейминг не применяется</li><li>`newline-delimited` — символ перевода строки отмечает на `stdin` окончание одного набора параметров, отделяя его от следующего.</li></ul>
+`--param-file` | Имя файла в формате [JSON](https://{{lang}}.wikipedia.org/wiki/JSON) в кодировке [UTF-8](https://{{lang}}.wikipedia.org/wiki/UTF-8), в котором заданы значения параметров, сопоставляемые с параметрами YQL-запроса по именам ключей.
+`--input-format` | Формат представления значений параметров. Действует на все способы их передачи (через параметр команды, файл или `stdin`).<br>Возможные значения:<ul><li>`json-unicode` (по умолчанию) — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON).</li><li>`json-base64` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON), в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64](https://{{lang}}.wikipedia.org/wiki/Base64).</li></ul>
+`--stdin-format` | Формат представления параметров и фрейминг для `stdin`. Чтобы задать оба значения, укажите параметр дважды.<br>**Формат представления параметров на `stdin`**<br>Возможные значения:<ul><li>`json-unicode` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON).</li><li>`json-base64` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON), в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64](https://{{lang}}.wikipedia.org/wiki/Base64).</li><li>`raw` — бинарные данные, имя параметра задается опцией `--stdin-par`.</li><li>`csv` — формат [CSV](https://{{lang}}.wikipedia.org/wiki/CSV).</li><li>`tsv` — формат [TSV](https://{{lang}}.wikipedia.org/wiki/TSV).</li></ul>Если формат представления параметров на `stdin` не задан, то применяется формат, заданный параметром `--input-format`.<br><br>**Разделение наборов параметров (фрейминг) для `stdin`**<br>Возможные значения:<ul><li>`no-framing` (по умолчанию) — фрейминг не применяется</li><li>`newline-delimited` — символ перевода строки отмечает на `stdin` окончание одного набора параметров, отделяя его от следующего.</li></ul>
+`--columns` | Строка с именами колонок, заменяющими header CSV/TSV документа, читаемого со stdin'а. Имена колонок должны быть в том же формате, что и сам документ.
+`--skip-rows` | Число строк с начала данных, читаемых со stdin'a, которые нужно пропустить, не включая строку header'a.
`--stdin-par` | Имя параметра, значение которого будет передано через `stdin`, указывается без символа `$`.
`--batch` | Режим пакетирования значений наборов параметров, получаемых через `stdin`.<br>Возможные значения:<ul><li>`iterative` (по умолчанию) — пакетирование выключено</li><li>`full` - полный пакет</li><li>`adaptive` - адаптивное пакетирование
`--batch-limit` | Максимальное количество наборов параметров в пакете для адаптивного режима пакетирования. Установка в `0` снимает ограничение.<br><br>Значение по умолчанию — `1000`.<br><br>
diff --git a/ydb/docs/ru/core/reference/ydb-cli/parameterized-queries-cli.md b/ydb/docs/ru/core/reference/ydb-cli/parameterized-queries-cli.md
index 2d7b3647834..f4bc9b4a5a6 100644
--- a/ydb/docs/ru/core/reference/ydb-cli/parameterized-queries-cli.md
+++ b/ydb/docs/ru/core/reference/ydb-cli/parameterized-queries-cli.md
@@ -10,7 +10,7 @@
* [ydb scripting yql](scripting-yql.md);
* [ydb table query execute](table-query-execute.md).
-Данные команды поддерживают одинаковый синтаксис и возможности передачи параметров запросов. Значения параметров могут быть заданы в командной строке, загружены из файлов в формате [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}, а также считаны с `stdin` в бинарном формате или в формате [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}. При передаче параметров через `stdin` поддерживается многократное поточное исполнение YQL-запроса с разными значениями параметров и возможностью пакетирования.
+Данные команды поддерживают одинаковый синтаксис и возможности передачи параметров запросов. Значения параметров могут быть заданы в командной строке, загружены из файлов в формате [JSON](https://{{lang}}.wikipedia.org/wiki/JSON), а также считаны с `stdin` в бинарном формате или в формате [JSON](https://{{lang}}.wikipedia.org/wiki/JSON). При передаче параметров через `stdin` поддерживается многократное поточное исполнение YQL-запроса с разными значениями параметров и возможностью пакетирования.
{% note warning %}
@@ -25,9 +25,11 @@
Имя | Описание
---|---
`-p, --param` | Выражение в формате `$name=value`, где `$name` — имя параметра YQL-запроса, а `value` — его значение (корректный [JSON value](https://www.json.org/json-ru.html)). Может быть указано несколько раз.<br><br>Все указываемые параметры должны быть декларированы в YQL-запросе [оператором DECLARE](../../yql/reference/syntax/declare.md), иначе будет выдана ошибка «Query does not contain parameter». Если один и тот же параметр указан несколько раз, будет выдана ошибка «Parameter value found in more than one source».<br><br>В зависимости от используемой операционной системы может понадобиться экранирование символа `$` или запись выражения в одинарных кавычках `'`.
-`--param-file` | Имя файла в формате [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %} в кодировке [UTF-8]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/UTF-8){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/UTF-8){% endif %}, в котором заданы значения параметров, сопоставляемые с параметрами YQL-запроса по именам ключей. Может быть указано несколько раз.<br><br>Если значения декларированного в YQL-запросе параметра будут обнаружены одновременно в нескольких файлах, или заданы в командной строке опцией `--param`, будет выдана ошибка «Parameter value found in more than one source».<br><br>Имена ключей в JSON-файле указываются без начального символа `$`. Ключи, которые присутствуют в файле, но не декларированы в YQL-запросе, будут проигнорированы без выдачи сообщения об ошибке.
-`--input-format` | Формат представления значений параметров. Действует на все способы их передачи (через параметр команды, файл или `stdin`).<br>Возможные значения:<ul><li>`json-unicode` (по умолчанию) — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}.</li><li>`json-base64` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}, в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Base64){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/Base64){% endif %}. Такая возможность позволяет передавать бинарные данные, декодирование которых из Base64 выполнит {{ ydb-short-name }} CLI.</li></ul>
-`--stdin-format` | Формат представления значений параметров на `stdin`.<br>{{ ydb-short-name }} CLI автоматически определяет что на стандартное устройство ввода `stdin` перенаправлен файл или выход другой команды командной оболочки, и в этом случае интерпретирует полученные данные в соответствии с возможными значениями:<ul><li>`json-unicode` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}.</li><li>`json-base64` — [JSON]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/JSON){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/JSON){% endif %}, в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64]{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Base64){% endif %}{% if lang == "en" %}(https://en.wikipedia.org/wiki/Base64){% endif %}.</li><li>`raw` - бинарные данные.</li></ul>Если формат представления параметров на `stdin` не задан, то применяется формат, заданный параметром `--input-format`.
+`--param-file` | Имя файла в формате [JSON](https://{{lang}}.wikipedia.org/wiki/JSON) в кодировке [UTF-8](https://{{lang}}.wikipedia.org/wiki/UTF-8), в котором заданы значения параметров, сопоставляемые с параметрами YQL-запроса по именам ключей. Может быть указано несколько раз.<br><br>Если значения декларированного в YQL-запросе параметра будут обнаружены одновременно в нескольких файлах, или заданы в командной строке опцией `--param`, будет выдана ошибка «Parameter value found in more than one source».<br><br>Имена ключей в JSON-файле указываются без начального символа `$`. Ключи, которые присутствуют в файле, но не декларированы в YQL-запросе, будут проигнорированы без выдачи сообщения об ошибке.
+`--input-format` | Формат представления значений параметров. Действует на все способы их передачи (через параметр команды, файл или `stdin`).<br>Возможные значения:<ul><li>`json-unicode` (по умолчанию) — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON).</li><li>`json-base64` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON), в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64](https://{{lang}}.wikipedia.org/wiki/Base64). Такая возможность позволяет передавать бинарные данные, декодирование которых из Base64 выполнит {{ ydb-short-name }} CLI.</li></ul>
+`--stdin-format` | Формат представления значений параметров на `stdin`.<br>{{ ydb-short-name }} CLI автоматически определяет что на стандартное устройство ввода `stdin` перенаправлен файл или выход другой команды командной оболочки, и в этом случае интерпретирует полученные данные в соответствии с возможными значениями:<ul><li>`json-unicode` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON).</li><li>`json-base64` — [JSON](https://{{lang}}.wikipedia.org/wiki/JSON), в котором значения параметров с типом «бинарная строка» (`DECLARE $par AS String`) представлены в кодировке [Base64](https://{{lang}}.wikipedia.org/wiki/Base64).</li><li>`raw` — бинарные данные.</li><li>`csv` — формат [CSV](https://{{lang}}.wikipedia.org/wiki/CSV). По умолчанию имена параметров должны находиться в header'е CSV файла. При единичном исполнении запроса допустима только одна строка в файле, не считая header'a.</li><li>`tsv` — формат [TSV](https://{{lang}}.wikipedia.org/wiki/TSV).</li></ul>Если формат представления параметров на `stdin` не задан, то применяется формат, заданный параметром `--input-format`.
+`--columns` | Строка с именами колонок, заменяющими header CSV/TSV документа, читаемого со stdin'а. Имена колонок должны быть в том же формате, что и сам документ. При указании опции считается, что header отсутствует. Опция допустима только с форматами stdin'a CSV и TSV.
+`--skip-rows` | Число строк с начала данных, читаемых со stdin'a, которые нужно пропустить, не включая строку header'a, если она имеется. Опция допустима только с форматами stdin'a CSV и TSV.
`--stdin-par` | Имя параметра, значение которого передано через `stdin`. Указывается без символа `$`. Обязательно при использовании формата `raw` в `--stdin-format`.<br><br>При использовании с JSON-форматами `stdin` интерпретируется не как JSON-документ, а как JSON value, с передачей значения в параметр с указанным именем.
Запрос будет отправлен на исполнение на сервер один раз, если значения заданы для всех параметров [в секции `DECLARE`](../../yql/reference/syntax/declare.md). Если хотя бы для одного параметра значение не задано, запрос не будет выполнен с выдачей сообщения об ошибке "Missing value for parameter".
@@ -128,6 +130,27 @@ curl -Ls http://ydb.tech/docs | {{ ydb-cli }} -p quickstart table query execute
└─────────┘
```
+#### Передача файла в формате CSV {#example-csv}
+
+```bash
+echo '10,Some text' | {{ ydb-cli }} -p quickstart table query execute \
+ -q 'declare $a as Int32;
+ declare $b as String
+ select $a, $b' \
+ --stdin-format csv \
+ --columns 'a,b'
+```
+
+Вывод команды:
+
+```text
+┌─────────┬─────────────┐
+| column0 | column1 |
+├─────────┼─────────────┤
+| 10 | "Some text" |
+└─────────┴─────────────┘
+```
+
## Итеративная потоковая обработка {#streaming-iterate}
{{ ydb-short-name }} CLI поддерживает возможность многократного исполнения YQL-запроса с разными наборами значений параметров, при их передаче через `stdin`. При этом соединение с базой данных устанавливается однократно, а план исполнения запроса кешируется, что существенно повышает производительность такого подхода по сравнению с отдельными вызовами CLI.
@@ -152,48 +175,149 @@ YQL-запрос выполняется столько раз, сколько н
#### Потоковая обработка нескольких наборов параметров {#example-iterate}
-Допустим, нам необходимо выполнить запрос трижды, со следующими наборами значений параметров `a` и `b`:
+{% list tabs %}
-1. `a` = 10, `b` = 20
-2. `a` = 15, `b` = 25
-3. `a` = 35, `b` = 48
+- JSON
-Создадим файл, который будет содержать строки с JSON-представлением этих наборов:
+ Допустим, нам необходимо выполнить запрос трижды, со следующими наборами значений параметров `a` и `b`:
-```bash
-echo -e '{"a":10,"b":20}\n{"a":15,"b":25}\n{"a":35,"b":48}' > par1.txt
-cat par1.txt
-```
+ 1. `a` = 10, `b` = 20
+ 2. `a` = 15, `b` = 25
+ 3. `a` = 35, `b` = 48
-Вывод команды:
+ Создадим файл, который будет содержать строки с JSON-представлением этих наборов:
-```text
-{"a":10,"b":20}
-{"a":15,"b":25}
-{"a":35,"b":48}
-```
+ ```bash
+ echo -e '{"a":10,"b":20}\n{"a":15,"b":25}\n{"a":35,"b":48}' > par1.txt
+ cat par1.txt
+ ```
-Исполним запрос, передав на `stdin` содержимое данного файла, с форматированием вывода в JSON:
+ Вывод команды:
-```bash
-cat par1.txt | \
-{{ ydb-cli }} -p quickstart table query execute \
- -q 'declare $a as Int64;
- declare $b as Int64;
- select $a+$b' \
- --stdin-format newline-delimited \
- --format json-unicode
-```
+ ```text
+ {"a":10,"b":20}
+ {"a":15,"b":25}
+ {"a":35,"b":48}
+ ```
-Вывод команды:
+ Исполним запрос, передав на `stdin` содержимое данного файла, с форматированием вывода в JSON:
-```text
-{"column0":30}
-{"column0":40}
-{"column0":83}
-```
+ ```bash
+ cat par1.txt | \
+ {{ ydb-cli }} -p quickstart table query execute \
+ -q 'declare $a as Int64;
+ declare $b as Int64;
+ select $a+$b' \
+ --stdin-format newline-delimited \
+ --format json-unicode
+ ```
+
+ Вывод команды:
+
+ ```text
+ {"column0":30}
+ {"column0":40}
+ {"column0":83}
+ ```
+
+ Полученный в таком формате результат можно использовать для передачи на вход команде исполнения следующего YQL-запроса.
+
+- CSV
+
+ Допустим, нам необходимо выполнить запрос трижды, со следующими наборами значений параметров `a` и `b`:
+
+ 1. `a` = 10, `b` = 20
+ 2. `a` = 15, `b` = 25
+ 3. `a` = 35, `b` = 48
+
+ Создадим файл c наборами значений параметров в формате CSV:
+
+ ```bash
+ echo -e 'a,b\n10,20\n15,25\n35,48' > par1.txt
+ cat par1.txt
+ ```
+
+ Вывод команды:
+
+ ```text
+ a,b
+ 10,20
+ 15,25
+ 35,48
+ ```
+
+ Исполним запрос, передав на `stdin` содержимое данного файла, с форматированием вывода в CSV:
+
+ ```bash
+ cat par1.txt | \
+ {{ ydb-cli }} -p quickstart table query execute \
+ -q 'declare $a as Int64;
+ declare $b as Int64;
+ select $a+$b, $a-$b' \
+ --stdin-format newline-delimited \
+ --stdin-format csv \
+ --format csv
+ ```
+
+ Вывод команды:
+
+ ```text
+ 30,-10
+ 40,-10
+ 83,-13
+ ```
+
+ Полученный в таком формате результат можно использовать для передачи на вход команде исполнения следующего YQL-запроса, задав header данным в CSV формате опцией `--columns`.
+
+- TSV
+
+ Допустим, нам необходимо выполнить запрос трижды, со следующими наборами значений параметров `a` и `b`:
+
+ 1. `a` = 10, `b` = row1
+ 2. `a` = 15, `b` = row 2
+ 3. `a` = 35, `b` = "row"\n3
+
+ Создадим файл c наборами значений параметров в формате TSV:
+
+ ```bash
+ echo -e 'a\tb\n10\trow1\n15\t"row\t2"\n35\t"""row""\n3"' > par1.txt
+ cat par1.txt
+ ```
+
+ Вывод команды:
+
+ ```text
+ a b
+ 10 row1
+ 15 "row 2"
+ 35 """row""
+ 3"
+ ```
+
+ Исполним запрос, передав на `stdin` содержимое данного файла, с форматированием вывода в TSV:
+
+ ```bash
+ cat par1.txt | \
+ {{ ydb-cli }} -p quickstart table query execute \
+ -q 'declare $a as Int64;
+ declare $b as Utf8;
+ select $a, $b' \
+ --stdin-format newline-delimited \
+ --stdin-format tsv \
+ --format tsv
+ ```
+
+ Вывод команды:
+
+ ```text
+ 10 "row1"
+ 15 "row\t2"
+ 35 "\"row\"\n3"
+ ```
+
+ Полученный в таком формате результат можно использовать для передачи на вход команде исполнения следующего YQL-запроса, задав header данным в TSV формате опцией `--columns`.
-Полученный в таком формате результат можно использовать для передачи на вход команде исполнения следующего YQL-запроса.
+{% endlist %}
#### Потоковая обработка с объединением значений параметров из разных источников {#example-iterate-union}