aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbazeltsev <bazeltsev@yandex-team.ru>2022-03-02 20:41:39 +0300
committerbazeltsev <bazeltsev@yandex-team.ru>2022-03-02 20:41:39 +0300
commit089bef8e096f26ae48fdb4718d226a8140f54059 (patch)
treebf7a1e5ca37e80b1f0a1d175e717e4e2e26a7275
parent7d51e7b6d2bff55a37aede21f4ccd9bd1032fa65 (diff)
downloadydb-089bef8e096f26ae48fdb4718d226a8140f54059.tar.gz
Вычитать core ru - faq, downloads
copy to kikimr updated ref:c84a309f9232712a12fedc06a116df9040fc45b2
-rw-r--r--ydb/docs/ru/core/downloads/index.md23
-rw-r--r--ydb/docs/ru/core/faq/_includes/all.md2
-rw-r--r--ydb/docs/ru/core/faq/_includes/common.md23
-rw-r--r--ydb/docs/ru/core/faq/_includes/errors.md8
-rw-r--r--ydb/docs/ru/core/faq/_includes/index.md3
-rw-r--r--ydb/docs/ru/core/faq/_includes/sdk.md11
-rw-r--r--ydb/docs/ru/core/faq/_includes/serverless.md4
-rw-r--r--ydb/docs/ru/core/faq/_includes/yql.md33
-rw-r--r--ydb/docs/ru/core/faq/all.md1
-rw-r--r--ydb/docs/ru/core/faq/common.md7
-rw-r--r--ydb/docs/ru/core/faq/errors.md1
-rw-r--r--ydb/docs/ru/core/faq/index.md6
-rw-r--r--ydb/docs/ru/core/faq/sdk.md1
-rw-r--r--ydb/docs/ru/core/faq/serverless.md1
-rw-r--r--ydb/docs/ru/core/faq/yql.md1
15 files changed, 48 insertions, 77 deletions
diff --git a/ydb/docs/ru/core/downloads/index.md b/ydb/docs/ru/core/downloads/index.md
index 61c6873ef8..68a7eb5490 100644
--- a/ydb/docs/ru/core/downloads/index.md
+++ b/ydb/docs/ru/core/downloads/index.md
@@ -3,7 +3,7 @@
## {{ ydb-short-name }} CLI
Интерфейс командной строки {{ ydb-short-name }} CLI — программа для управления вашими данными в {{ ydb-short-name }}.
-Ознакомьтесь с документацией по работе с [{{ ydb-short-name }} CLI](../reference/ydb-cli/index.md)
+Ознакомьтесь с документацией по работе с [{{ ydb-short-name }} CLI](../reference/ydb-cli/index.md).
{% list tabs %}
@@ -11,31 +11,31 @@
Версия | Дата выпуска | Скачать
:--- | :--- | :---
- v.1.6.0 | 2021-12-24 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/linux/amd64/ydb)
+ v.1.6.0 | 24.12.21 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/linux/amd64/ydb)
- macOS (Intel)
-
+
Версия | Дата выпуска | Скачать
:--- | :--- | :---
- v.1.6.0 | 2021-12-24 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/darwin/amd64/ydb)
+ v.1.6.0 | 24.12.21 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/darwin/amd64/ydb)
- macOS (M1 arm)
Версия | Дата выпуска | Скачать
:--- | :--- | :---
- v.1.6.0 | 2021-12-24 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/darwin/arm64/ydb)
+ v.1.6.0 | 24.12.21 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/darwin/arm64/ydb)
- Windows
Версия | Дата выпуска | Скачать
:--- | :--- | :---
- v.1.6.0 | 2021-12-24 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/windows/amd64/ydb.exe)
+ v.1.6.0 | 24.12.21 | [Бинарный файл](https://storage.yandexcloud.net/yandexcloud-ydb/release/1.6.0/windows/amd64/ydb.exe)
{% endlist %}
## {{ ydb-short-name }} Server
-Программа для запуска {{ ydb-short-name }} сервера
+Программа для запуска {{ ydb-short-name }} сервера.
{% list tabs %}
@@ -43,15 +43,12 @@
Версия | Стабильный | Дата выпуска | Скачать
:--- | :--- | :--- | :---
- v.21.4.62 | stable | 2022-02-12 | [Бинарный файл](https://binaries.ydb.tech/ydbd-main-linux-amd64.tar.gz)
+ v.21.4.62 | Да | 12.02.22 | [Бинарный файл](https://binaries.ydb.tech/ydbd-main-linux-amd64.tar.gz)
- Docker
- Версия | Стабильный Ё Дата выпуска | Скачать
+ Версия | Стабильный | Дата выпуска | Скачать
:--- | :--- | :---
- v.24.4.62 | да | 2022-02-12 | `cr.yandex/crpl7ipeu79oseqhcgn2/ydb-oss:main`
+ v.24.4.62 | Да | 12.02.22 | `cr.yandex/crpl7ipeu79oseqhcgn2/ydb-oss:main`
{% endlist %}
-
-
-
diff --git a/ydb/docs/ru/core/faq/_includes/all.md b/ydb/docs/ru/core/faq/_includes/all.md
index d77c66cc68..ffda31a64a 100644
--- a/ydb/docs/ru/core/faq/_includes/all.md
+++ b/ydb/docs/ru/core/faq/_includes/all.md
@@ -5,6 +5,7 @@
{% include notitle [common.md](../common.md) %}
{% if oss %}
+
## SDK {#SDK}
{% include notitle [sdk.md](../sdk.md) %}
@@ -18,4 +19,3 @@
## Ошибки {#errors}
{% include notitle [errors.md](../errors.md) %}
-
diff --git a/ydb/docs/ru/core/faq/_includes/common.md b/ydb/docs/ru/core/faq/_includes/common.md
index 6e68487724..f73f1080f9 100644
--- a/ydb/docs/ru/core/faq/_includes/common.md
+++ b/ydb/docs/ru/core/faq/_includes/common.md
@@ -13,7 +13,7 @@ description: "Что такое YDB? Для каких задач стоит и
#### Какие возможности предоставляет {{ ydb-short-name }}? {#ydb-features}
-{{ ydb-short-name }} обеспечивает высокую доступность и сохранность данных благодаря синхронной репликации в трех зонах доступности. Также {{ ydb-short-name }} следит за равномерным распределением нагрузки на доступные аппаратные ресуры. Это значит, что не нужно заказывать ресурсы, {{ ydb-short-name }} автоматически выделяет и освобождает ресурсы, исходя из пользовательской нагрузки.
+{{ ydb-short-name }} обеспечивает высокую доступность и сохранность данных благодаря синхронной репликации в трех зонах доступности. Также {{ ydb-short-name }} следит за равномерным распределением нагрузки на доступные аппаратные ресурсы. Это значит, что не нужно заказывать ресурсы, {{ ydb-short-name }} автоматически выделяет и освобождает ресурсы, исходя из пользовательской нагрузки.
#### Какая модель консистентности используется в {{ ydb-short-name }}? {#ydb-consistency}
@@ -21,26 +21,23 @@ description: "Что такое YDB? Для каких задач стоит и
#### Как проектировать первичный ключ? {#create-pk}
-Чтобы правильно спроектировать первичный ключ стоит придерживаться следующих правил.
+Чтобы правильно спроектировать первичный ключ, стоит придерживаться следующих правил:
* Необходимо избегать ситуаций, когда основная часть нагрузки приходится на одну партицию таблицы. При равномерной нагрузке проще достигается высокая общая производительность.
Как следствие этого правила, не стоит в качестве первичного ключа таблицы использовать монотонно возрастающую последовательность, например, timestamp.
-
-* Чем меньше партиций таблиц будет задействованно во время исполнения запроса — тем быстрее он будет исполнен. Чтобы достичь большей производительности стоит руководствоваться правилом: один запрос — одна партиция.
-
+* Чем меньше партиций таблиц будет задействовано во время исполнения запроса, тем быстрее он будет исполнен. Чтобы достичь большей производительности стоит руководствоваться правилом: один запрос — одна партиция.
* Необходимо избегать ситуаций, при которых какая-то малая часть БД нагружена существенно больше, чем остальные части БД.
Подробнее читайте в разделе [Проектирование схемы](../../best_practices/schema_design.md).
#### Как равномерно распределить нагрузку по партициям таблицы? {#balance-shard-load}
-Для равномерного распределения нагрузки по партициям таблиц и увеличения общей производительности БД, можно использовать следующие техники.
+Для равномерного распределения нагрузки по партициям таблиц и увеличения общей производительности БД, можно использовать следующие техники:
* Для избежания использования монотонно возрастающих значений первичного ключа можно:
* изменить порядок следования его компонентов;
* использовать хеш от значений ключевых колонок в качестве первичного ключа.
-
* Необходимо уменьшать количество партиций таблиц, задействованных в одном запросе.
Подробнее читайте в разделе [Проектирование схемы](../../best_practices/schema_design.md#balance-shard-load).
@@ -49,7 +46,7 @@ description: "Что такое YDB? Для каких задач стоит и
В {{ ydb-short-name }} все колонки, включая ключевые, могут содержать значение `NULL`, однако использовать `NULL` в качестве значений в ключевых колонках не рекомендуется.
- По стандарту языка SQL (ISO/IEC 9075), значение `NULL` нельзя сравнивать с другими значениями, вследствие чего, использование лаконичных конструкций SQL с простыми операторами сравнения может приводить, например, к тому что, строки, содержащие значение NULL, могут быть пропущены при фильтрации.
+По стандарту языка SQL (ISO/IEC 9075) значение `NULL` нельзя сравнивать с другими значениями, вследствие чего использование лаконичных конструкций SQL с простыми операторами сравнения может приводить, например, к тому, что строки, содержащие значение NULL, могут быть пропущены при фильтрации.
#### Существует ли оптимальный размер строки базы данных? {#string-size}
@@ -69,21 +66,17 @@ description: "Что такое YDB? Для каких задач стоит и
Подробнее читайте в разделе [Постраничный вывод](../../best_practices/paging.md).
-#### Как эффективно загружать в {{ ydb-short-name }} большие объёмы данных? {#batch_upload}
+#### Как эффективно загружать в {{ ydb-short-name }} большие объемы данных? {#batch_upload}
-Для увеличения скорости загрузки больших объёмов данных необходимо следовать следующим рекомендациям:
+Для увеличения скорости загрузки больших объемов данных необходимо следовать следующим рекомендациям:
* При создании таблицы стоит явно указать необходимое количество партиций или их границы. Это поможет эффективно использовать пропускную способность системы сразу после начала загрузки данных, поскольку поможет избежать ненужных перепартиционирований таблицы.
-
* Не стоит вставлять данные отдельными транзакциями для каждой строки. Более эффективно производить вставки по несколько строк (батчами). В этом случае накладные расходы на сам механизм транзакций будут меньше.
-
* В дополнение к предыдущему пункту — в каждой транзакции (батче) вставляйте строки из уже отсортированного по первичному ключу набора данных, чтобы минимизировать количество партиций, затрагиваемых транзакцией.
-
* Следует избегать последовательной записи данных в порядке возрастания или убывания значения первичного ключа, чтобы равномерно распределить нагрузку на все партиции таблицы.
-Подробнее читайте в разделе [Загрузка больших объёмов данных](../../best_practices/batch_upload.md).
+Подробнее читайте в разделе [Загрузка больших объемов данных](../../best_practices/batch_upload.md).
#### Как удалять устаревшие данные? {#ttl}
Для эффективного удаления устаревших данных рекомендуется использовать [TTL](../../concepts/ttl.md).
-
diff --git a/ydb/docs/ru/core/faq/_includes/errors.md b/ydb/docs/ru/core/faq/_includes/errors.md
index 4c244e295d..aa61d11d95 100644
--- a/ydb/docs/ru/core/faq/_includes/errors.md
+++ b/ydb/docs/ru/core/faq/_includes/errors.md
@@ -1,11 +1,11 @@
# Ошибки
-#### Что делать, если я часто получаю ошибку <q>Transaction locks invalidated</q>? {#locks-invalidated}
+#### Что делать, если я часто получаю ошибку «Transaction locks invalidated»? {#locks-invalidated}
-Обычно при получении этой ошибки следует повторить выполнение транзакции, так как {{ ydb-short-name }} использует оптимистичные блокировки. Если такая ошибка возникает часто, это означает, что в транзакции читается большое количество строк или, что много транзакций конкурируют за одни и те же "горячие" строки. Имеет смысл просмотреть запросы, выполняющиеся в транзакции и определить, не читают ли они лишние строки.
+Обычно при получении этой ошибки следует повторить выполнение транзакции, так как {{ ydb-short-name }} использует оптимистичные блокировки. Если такая ошибка возникает часто, это означает, что в транзакции читается большое количество строк или, что много транзакций конкурируют за одни и те же «горячие» строки. Имеет смысл просмотреть запросы, выполняющиеся в транзакции и определить, не читают ли они лишние строки.
-#### Почему возникает ошибка <q>Exceeded maximum allowed number of active transactions</q>? {#exceed-number-transactions}
+#### Почему возникает ошибка «Exceeded maximum allowed number of active transactions»? {#exceed-number-transactions}
В логике на клиентской стороне надо стараться держать как можно более короткие транзакции.
-В рамках сессии разрешено не более 10 активных транзакций. При старте транзакции нужно использовать либо коммит-флаг для автокоммита, либо явный коммит/роллбек. \ No newline at end of file
+В рамках сессии разрешено не более 10 активных транзакций. При старте транзакции нужно использовать либо коммит-флаг для автокоммита, либо явный коммит/роллбек.
diff --git a/ydb/docs/ru/core/faq/_includes/index.md b/ydb/docs/ru/core/faq/_includes/index.md
index eeb39f7916..c795c463d0 100644
--- a/ydb/docs/ru/core/faq/_includes/index.md
+++ b/ydb/docs/ru/core/faq/_includes/index.md
@@ -6,6 +6,3 @@
{% endif %}
* [YQL](../yql.md)
* [Ошибки](../errors.md)
-
-
-
diff --git a/ydb/docs/ru/core/faq/_includes/sdk.md b/ydb/docs/ru/core/faq/_includes/sdk.md
index 4a70c0f81e..6c446cca13 100644
--- a/ydb/docs/ru/core/faq/_includes/sdk.md
+++ b/ydb/docs/ru/core/faq/_includes/sdk.md
@@ -1,21 +1,20 @@
# SDK
-#### Почему может возникать ошибка <q>Status: OVERLOADED Error: Pending previous query completion</q> в C++ SDK?
+#### Почему может возникать ошибка «Status: OVERLOADED Error: Pending previous query completion» в C++ SDK?
-Q: При запуске двух запросов, пытаюсь получить ответ из фьючера от второго из них. Получаю: ```Status: OVERLOADED Why: <main>: Error: Pending previous query completion```
+Q: При запуске двух запросов, пытаюсь получить ответ из фьючера от второго из них. Получаю: `Status: OVERLOADED Why: <main>: Error: Pending previous query completion`.
A: Сессия в SDK однопоточная. Если нужно параллельно использовать несколько запросов, нужно создавать несколько сессий.
#### Что делать, если SDK экстренно завершает работу при завершении работы приложения? {#what-to-do-if-the-sdk-crashes-urgently-when-the-app-is-shut-down}
-Не следует оборачивать компоненты SDK в синглтон, так как время их жизни не должно превышать время выполнения функции `main()`. Так как при уничтожении клиента происходит опустошение пулов сессий, требуется возможность перехода по сети. Но gPRC содержит глобальные статические переменные, которые к этому времени уже могут быть разрушены. Таким образом, работа gRPC невозможна.
-При необходимости сделать драйвер глобальным объектом, на драйвере нужно вызвать функцию `Stop(true)` перед выходом из `main()`.
+Не следует оборачивать компоненты SDK в синглтон, так как время их жизни не должно превышать время выполнения функции `main()`. Так как при уничтожении клиента происходит опустошение пулов сессий, требуется возможность перехода по сети. Но gPRC содержит глобальные статические переменные, которые к этому времени уже могут быть разрушены. Таким образом, работа gRPC невозможна. При необходимости сделать драйвер глобальным объектом, на драйвере нужно вызвать функцию `Stop(true)` перед выходом из `main()`.
#### Что делать, если при вызове `fork()` в дочернем процессе программа работает некорректно? {#program-does-not-work-correctly-when-calling-fork}
Вызов `fork()` в многопоточных приложениях является антипаттерном. Так как и SDK, и gRPC-библиотека являются многопоточными приложениями, стабильность их работы не гарантируется.
-#### Что делать, если я получаю ошибку "Active sessions limit exceeded", хотя текущее количество активных сессий не превышает лимит? {#active-sessions-does-not-exceed-the-limit}
+#### Что делать, если я получаю ошибку «Active sessions limit exceeded», хотя текущее количество активных сессий не превышает лимит? {#active-sessions-does-not-exceed-the-limit}
Лимит действует на количество активных сессий. Активная сессия — сессия, переданная клиенту для использования в его коде. Сессия возвращается в пулл в деструкторе. При этом, сама сессия является копируемым объектом. Возможно, вы сохранили в коде копию сессии.
@@ -25,4 +24,4 @@ A: Сессия в SDK однопоточная. Если нужно парал
#### Что делать, если отказала одна из ВМ и невозможно сделать запрос? {#vms-failed-and-you-cant-make-a-request}
-Чтобы выявить недоступность ВМ нужно проставить клиентский таймаут. Все запросы содержат параметры для клиентского таймаута. Величина таймаута должна быть на порядок больше ожидаемого времени выполнения запроса. \ No newline at end of file
+Чтобы выявить недоступность ВМ, нужно проставить клиентский таймаут. Все запросы содержат параметры для клиентского таймаута. Величина таймаута должна быть на порядок больше ожидаемого времени выполнения запроса.
diff --git a/ydb/docs/ru/core/faq/_includes/serverless.md b/ydb/docs/ru/core/faq/_includes/serverless.md
index af964f0572..e4ef227991 100644
--- a/ydb/docs/ru/core/faq/_includes/serverless.md
+++ b/ydb/docs/ru/core/faq/_includes/serverless.md
@@ -1,6 +1,6 @@
# {{ ydb-short-name }} в Serverless режиме
-#### Как вторичные индексы влияют на стоимость запроса
+#### Как вторичные индексы влияют на стоимость запроса?
Операции с индексами оцениваются по тем же правилам, что и операции с таблицами. Они отражаются в статистике исполнения запроса и включаются в суммарные показатели, на основании которых делается расчет стоимости в RequestUnits (RU). Подробнее читайте в [правилах тарификации бессерверного режима для {{ ydb-short-name }} API](https://cloud.yandex.ru/docs/ydb/pricing/request_units_yql).
@@ -8,6 +8,6 @@
При добавлении новой строки в таблицу в каждый индекс, существующий на этой таблице, будет также сделано добавление записи, с отражением в статистике количества добавленных записей и объема записанных данных.
-При изменении строки таблицы в статистику попадет операция удаления старой записи из индекса, и добавления новой, для всех индексов, в которые включены изменяемые поля.
+При изменении строки таблицы в статистику попадет операция удаления старой записи из индекса и добавления новой для всех индексов, в которые включены изменяемые поля.
При удалении строки таблицы в статистику попадет удаление записей из всех индексов на этой таблице.
diff --git a/ydb/docs/ru/core/faq/_includes/yql.md b/ydb/docs/ru/core/faq/_includes/yql.md
index 5c6dd9e26f..6fd284b998 100644
--- a/ydb/docs/ru/core/faq/_includes/yql.md
+++ b/ydb/docs/ru/core/faq/_includes/yql.md
@@ -4,7 +4,7 @@
#### Как выбрать из таблицы строчки по заданному списку ключей? {#explicit-keys}
-Выборка строчек таблицы по заданному списку значений первичного ключа (или префикса ключа) таблицы выполняется с помощью оператора IN:
+Выборка строчек таблицы по заданному списку значений первичного ключа (или префикса ключа) таблицы выполняется с помощью оператора `IN`:
```sql
DECLARE $keys AS List<UInt64>;
@@ -26,7 +26,7 @@ WHERE (Key1, Key2) IN $keys;
#### Осуществляется ли поиск по индексу для условий, содержащих оператор LIKE? {#like-index}
-Оператор LIKE может быть использован для поиска по индексу таблицы только в случае если он задает префикс строки:
+Оператор `LIKE` может быть использован для поиска по индексу таблицы только в случае, если он задает префикс строки:
```sql
SELECT * FROM string_key_table
@@ -37,24 +37,25 @@ WHERE Key LIKE "some_prefix%";
1000 строк — ограничение на размер одного результата для YQL запроса. В случае если результат запроса был обрезан, он будет помечен флагом `Truncated`. Чтобы получить большее количество строк из таблицы, можно воспользоваться [постраничным выводом](../../best_practices/paging.md) или операцией `ReadTable`.
-#### Что делать, если при запросе я получаю ошибку <q>Datashard: Reply size limit exceeded</q>? {#reply-size-exceeded}
+#### Что делать, если при запросе я получаю ошибку «Datashard: Reply size limit exceeded»? {#reply-size-exceeded}
-Данная ошибка означает, что при выполнении запроса с одного из участвующих в нем даташардов была попытка вернуть более 50 Мб данных, что превышает допустимый лимит.
+Данная ошибка означает, что при выполнении запроса с одного из участвующих в нем даташардов была попытка вернуть более 50 МБ данных, что превышает допустимый лимит.
Рекомендации:
+
* Общая рекомендация — уменьшить объем данных, обрабатываемых в транзакции.
-* Если выполняется операция Join, стоит убедиться, что она выполняется способом [Index lookup Join](#index-lookup-join).
+* Если выполняется операция `Join`, стоит убедиться, что она выполняется способом [Index lookup Join](#index-lookup-join).
* Если осуществляется простая выборка, стоит убедиться, что она делается по ключам, или добавить `LIMIT` в запрос.
-#### Что делать, если при запросе я получаю ошибку <q>Datashard program size limit exceeded</q>? {#program-size-exceeded}
+#### Что делать, если при запросе я получаю ошибку «Datashard program size limit exceeded»? {#program-size-exceeded}
-Данная ошибка означает, что размер программы (в сумме со значениями параметров) для одного из даташардов первысил лимит в 50 МБ. Чаще всего это означает попытку записать в таблицы базы более 50 Мб данных в одной транзакции. В качестве записей учитываются все модифицирующие операции в транзакции, такие как `UPSERT`, `REPLACE`, `INSERT`, `UPDATE`.
+Данная ошибка означает, что размер программы (в сумме со значениями параметров) для одного из даташардов превысил лимит в 50 МБ. Чаще всего это означает попытку записать в таблицы базы более 50 МБ данных в одной транзакции. В качестве записей учитываются все модифицирующие операции в транзакции, такие как `UPSERT`, `REPLACE`, `INSERT`, `UPDATE`.
Необходимо уменьшить суммарных объем записей в одной транзакции. В общем случае не рекомендуется объединять в единую транзакцию запросы, которые логически не требуют транзакционности. В случае добавления/обновления данных батчами, рекомендуется уменьшить размер одного батча до значений, не превышающих нескольких мегабайт.
#### Как обновить только те значения, ключей которых нет в таблице? {#update-non-existent}
-Можно использовать операцию LEFT JOIN, чтобы пометить отсутствующие в таблице ключи, после чего обновить их значения:
+Можно использовать операцию `LEFT JOIN`, чтобы пометить отсутствующие в таблице ключи, после чего обновить их значения:
```sql
DECLARE $values AS List<Struct<Key: UInt64, Value: String>>;
@@ -71,17 +72,18 @@ WHERE t.Key IS NULL;
#### Есть ли особенности в работе операции Join? {#join-operations}
-Операция Join в {{ ydb-short-name }} выполняется одним из двух способов:
-* Common Join
-* Index Lookup Join
+Операция `Join` в {{ ydb-short-name }} выполняется одним из двух способов:
+
+* Common Join;
+* Index Lookup Join.
#### Common Join {#common-join}
-Содержимое обеих таблиц (левая и правая части Join) отправляется на выполняющий запрос узел, где операция выполняется над данными целиком. Это универсальный способ выполнения операции Join, который применяется в случае, когда более оптимальные способы неприменимы. Для больших таблиц такой способ или работает медленно, или в общем случае не работает из-за превышения лимитов на пересылку данных.
+Содержимое обеих таблиц (левая и правая части `Join`) отправляется на выполняющий запрос узел, где операция выполняется над данными целиком. Это универсальный способ выполнения операции `Join`, который применяется в случае, когда более оптимальные способы неприменимы. Для больших таблиц такой способ или работает медленно, или в общем случае не работает из-за превышения лимитов на пересылку данных.
#### Index lookup Join {#index-lookup-join}
-Для строчек из левой части операции Join осуществляется поиск (lookup) соответствующих значений в правой части. Данный способ применяется, когда правая часть является таблицей и ключ операции Join является префиксом ее первичного ключа или ключа вторичного индекса. При использовании данного способа из правой таблицы делаются ограниченные выборки, вместо полного чтения, что позволяет использовать его при работе с большими таблицами.
+Для строчек из левой части операции `Join` осуществляется поиск (lookup) соответствующих значений в правой части. Данный способ применяется, когда правая часть является таблицей и ключ операции `Join` является префиксом ее первичного ключа или ключа вторичного индекса. При использовании данного способа из правой таблицы делаются ограниченные выборки, вместо полного чтения, что позволяет использовать его при работе с большими таблицами.
{% note info %}
@@ -103,9 +105,10 @@ ON t.Key1 = d.Key1 AND t.Key2 = d.Key2;
Явного ограничения на количество записей в константной таблице нет, но нужно иметь в виду стандартное ограничение на общий размер параметров запроса (50 МБ).
-#### Как лучше реализовать запрос вида (key1, key2) IN ((v1, v2), (v3, v4), ...) {#key-pairs-in}
+#### Как лучше реализовать запрос вида (key1, key2) IN ((v1, v2), (v3, v4), ...)? {#key-pairs-in}
Это лучше записывать через JOIN с константной таблицей:
+
```sql
$keys = AsList(
AsStruct(1 AS Key1, "One" AS Key2),
@@ -126,4 +129,4 @@ ON t.Key1 = k.Key1 AND t.Key2 = k.Key2;
#### Является ли отдельный запрос атомарным? {#atomic-query}
-В общем случае YQL-запросы могут выполняться в несколько последовательных фаз. Например, запрос с операцией Join может быть выполнен в две фазы, читающие данные левой и правой таблицы соответственно. Этот аспект является важным при выполнении запроса в транзакции с низким уровнем изоляции (`online_read_only`), так как в этом случае данные между фазами выполнения могут быть изменены другими транзакциями. \ No newline at end of file
+В общем случае YQL-запросы могут выполняться в несколько последовательных фаз. Например, запрос с операцией Join может быть выполнен в две фазы, читающие данные левой и правой таблицы соответственно. Этот аспект является важным при выполнении запроса в транзакции с низким уровнем изоляции (`online_read_only`), так как в этом случае данные между фазами выполнения могут быть изменены другими транзакциями.
diff --git a/ydb/docs/ru/core/faq/all.md b/ydb/docs/ru/core/faq/all.md
index 8aa014db3b..5c253cdb17 100644
--- a/ydb/docs/ru/core/faq/all.md
+++ b/ydb/docs/ru/core/faq/all.md
@@ -1,4 +1,3 @@
-
{% include [all.md](_includes/all.md) %}
## Serverless {#serverless}
diff --git a/ydb/docs/ru/core/faq/common.md b/ydb/docs/ru/core/faq/common.md
index bf3c23267c..47a7c34acf 100644
--- a/ydb/docs/ru/core/faq/common.md
+++ b/ydb/docs/ru/core/faq/common.md
@@ -1,8 +1 @@
-
{% include [common.md](_includes/common.md) %}
-
-{% if audience == "external" %}
-
-{% include [qa-logs](../../_includes/qa-logs.md) %}
-
-{% endif %}
diff --git a/ydb/docs/ru/core/faq/errors.md b/ydb/docs/ru/core/faq/errors.md
index db4af81876..35ea268981 100644
--- a/ydb/docs/ru/core/faq/errors.md
+++ b/ydb/docs/ru/core/faq/errors.md
@@ -1,2 +1 @@
-
{% include [errors.md](_includes/errors.md) %}
diff --git a/ydb/docs/ru/core/faq/index.md b/ydb/docs/ru/core/faq/index.md
index 48707dde45..12643df073 100644
--- a/ydb/docs/ru/core/faq/index.md
+++ b/ydb/docs/ru/core/faq/index.md
@@ -1,7 +1 @@
-
{% include [index.md](_includes/index.md) %}
-
-
-
-
-
diff --git a/ydb/docs/ru/core/faq/sdk.md b/ydb/docs/ru/core/faq/sdk.md
index 9832e66cf0..18bd227b1a 100644
--- a/ydb/docs/ru/core/faq/sdk.md
+++ b/ydb/docs/ru/core/faq/sdk.md
@@ -1,2 +1 @@
-
{% include [sdk.md](_includes/sdk.md) %}
diff --git a/ydb/docs/ru/core/faq/serverless.md b/ydb/docs/ru/core/faq/serverless.md
index cfed22fac2..5429ea3430 100644
--- a/ydb/docs/ru/core/faq/serverless.md
+++ b/ydb/docs/ru/core/faq/serverless.md
@@ -1,2 +1 @@
-
{% include [serverless.md](_includes/serverless.md) %}
diff --git a/ydb/docs/ru/core/faq/yql.md b/ydb/docs/ru/core/faq/yql.md
index f3f23af9cf..1bba08b228 100644
--- a/ydb/docs/ru/core/faq/yql.md
+++ b/ydb/docs/ru/core/faq/yql.md
@@ -1,2 +1 @@
-
{% include [yql.md](_includes/yql.md) %}