-
Notifications
You must be signed in to change notification settings - Fork 695
YDB FQ: docs for MongoDB
as an external data source
#17978
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
ninaiad
wants to merge
5
commits into
ydb-platform:main
Choose a base branch
from
ninaiad:fq-mongodb-docs
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
4808b47
mongodb docs
ninaiad 70ae275
Update ydb/docs/ru/core/concepts/federated_query/mongodb.md
ninaiad d6cc55b
Update ydb/docs/ru/core/concepts/federated_query/mongodb.md
ninaiad 7f1632e
Update ydb/docs/ru/core/concepts/federated_query/mongodb.md
ninaiad 18e737a
Update ydb/docs/ru/core/concepts/federated_query/mongodb.md
ninaiad File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
# Работа с базами данных MongoDB | ||
|
||
В этом разделе приведена основная информация о работе с внешней NoSQL-базой данных [MongoDB](https://www.mongodb.com/). | ||
|
||
Для работы с внешней базой данных MongoDB необходимо выполнить следующие шаги: | ||
|
||
1. Создать [секрет](../datamodel/secrets.md), содержащий пароль для подключения к базе данных. | ||
|
||
```yql | ||
CREATE OBJECT mongodb_datasource_user_password (TYPE SECRET) WITH (value = "<password>"); | ||
``` | ||
|
||
1. Создать [внешний источник данных](../datamodel/external_data_source.md), описывающий целевую базу данных внутри кластера MongoDB. Для соединения с MongoDB используется [нативный TCP-протокол](https://www.mongodb.com/docs/manual/reference/mongodb-wire-protocol/) (`PROTOCOL="NATIVE"`). Параметр `LOCATION` содержит сетевой адрес экземпляра MongoDB, к которому осуществляется подключение. В `DATABASE_NAME` указывается имя базы данных (например, `master`). Для аутентификации во внешнюю базу используются значения параметров `LOGIN` и `PASSWORD_SECRET_NAME`. Включить шифрование соединений с внешней базой данных можно с помощью параметра `USE_TLS="TRUE"`. | ||
|
||
Параметр `READING_MODE` определяет то, каким образом документ из MongoDB будет представлен в реляционном формате: опция `TABLE` подразумевает отображение каждого корневого поля документа в отдельную колонку таблицы. | ||
|
||
В параметре `UNSUPPORTED_TYPE_DISPLAY_MODE` указывается политика обработки типов данных MongoDB, которые пока не поддерживаются в {{ ydb-full-name }}. Можно выбрать один из двух вариантов: в случае `UNSUPPORTED_OMIT` поля неподдерживаемых типов будут пропущены в результате запроса, а с `UNSUPPORTED_AS_STRING` запрос вернёт значение подобных полей в сериализованном виде как тип `Utf8`. Подробнее о том, как система типов MongoDB отображается в {{ ydb-full-name }}, можно прочитать в разделе [«Поддерживаемые типы данных»](#supported-data-types). | ||
|
||
Опция `UNEXPECTED_TYPE_DISPLAY_MODE` отвечает за представление значений, которые оказались несовместимы с выведенной структурой документов MongoDB. При чтении данных из внешнего источника MongoDB {{ ydb-full-name }} автоматически выводит структуру документов коллекции с помощью небольшого скана. Поскольку данные MongoDB неструктурированы, отдельные документы коллекции могут не соответствовать полученной схеме. С опцией `UNEXPECTED_AS_NULL` подобные поля будут пропускаться вне зависимости от выведенного типа, а с опцией `UNEXPECTED_AS_STRING` значения полей неприводимых типов будут сериализованы в строки `Utf8`, если ожидаемый тип подобных полей в выведенной схеме — `Utf8`. | ||
|
||
```yql | ||
CREATE EXTERNAL DATA SOURCE mongodb_datasource WITH ( | ||
SOURCE_TYPE="MongoDB", | ||
LOCATION="<host>:<port>", | ||
DATABASE_NAME="<database>", | ||
AUTH_METHOD="BASIC", | ||
LOGIN="<login>", | ||
PASSWORD_SECRET_NAME="mongodb_datasource_user_password", | ||
USE_TLS="TRUE", | ||
READING_MODE="TABLE", | ||
UNSUPPORTED_TYPE_DISPLAY_MODE="UNSUPPORTED_OMIT", | ||
UNEXPECTED_TYPE_DISPLAY_MODE="UNEXPECTED_AS_NULL" | ||
); | ||
``` | ||
|
||
1. {% include [!](_includes/connector_deployment.md) %} | ||
1. [Выполнить запрос](#query) к базе данных. | ||
|
||
## Синтаксис запросов {#query} | ||
|
||
Для работы с MongoDB используется следующая форма SQL-запроса: | ||
|
||
```yql | ||
SELECT * FROM mongodb_datasource.<collection_name> | ||
``` | ||
|
||
где: | ||
|
||
- `mongodb_datasource` - идентификатор внешнего источника данных; | ||
- `<collection_name>` - имя коллекции внутри внешнего источника данных. | ||
|
||
## Ограничения | ||
|
||
При работе с кластерами MongoDB существует ряд ограничений: | ||
|
||
1. {% include [!](_includes/supported_requests.md) %} | ||
1. {% include [!](_includes/predicate_pushdown.md) %} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Тут точно ровно те же ограничения, как и в источниках с поддержкой SQL? |
||
|
||
|Тип данных {{ ydb-short-name }}| | ||
|----| | ||
|`Bool`| | ||
|`Int8`| | ||
|`Uint8`| | ||
|`Int16`| | ||
|`Uint16`| | ||
|`Int32`| | ||
|`Uint32`| | ||
|`Int64`| | ||
|`Uint64`| | ||
|`Float`| | ||
|`Double`| | ||
|`String`| | ||
|`Utf8`| | ||
|
||
## Поддерживаемые типы данных {#supported-data-types} | ||
|
||
MongoDB — это NoSQL-СУБД, предназначенная для работы с неструктурированными и полуструктурированными данными. В отличие от реляционных баз данных, MongoDB хранит JSON-подобные документы, которые, как правило, не соответствуют единому формату или структуре. В связи с этим для преобразования данных MongoDB в реляционный формат, необходимый для выполнения SQL-запросов, {{ ydb-full-name }} автоматически выводит схему MongoDB при выполнении запроса с помощью небольшого сканирования коллекции. В случае обработки документов, в которых одинаковые поля представлены разными неприводимыми типами (например, `Int32` и `String`), они будут представлены в запросе в сериализованном виде, а тип {{ ydb-full-name }} для них будет соответствовать `Optional<Utf8>`. | ||
|
||
Любые поля MongoDB, кроме `_id`, по умолчанию могут быть опущены или содержать значения `NULL`, и в системе типов {{ ydb-full-name }} они должны отображаться в [опциональные](../../yql/reference/types/optional.md) типы. Поскольку поле `_id` в разных документах одной коллекции может иметь разные типы, в системе типов {{ ydb-full-name }} оно также будет опциональным. | ||
|
||
Ниже приведена таблица соответствия типов MongoDB и {{ ydb-short-name }}. Все остальные типы данных, за исключением перечисленных, не поддерживаются и не могут быть использованы в пушдауне предикатов. Однако поля таких типов всё ещё могут использоваться в качестве возвращаемого значения запроса в сериализованном виде как `Optional<Utf8>` при включении параметра `UNSUPPORTED_TYPE_DISPLAY_MODE=UNSUPPORTED_AS_STRING`. | ||
|
||
|Тип данных MongoDB|Тип данных {{ ydb-full-name }} | ||
|---|---| | ||
|`Boolean`|`Optional<Bool>`| | ||
|`Int32`|`Optional<Int32>`| | ||
|`Int64`|`Optional<Int64>`| | ||
|`Double`|`Optional<Double>`| | ||
|`String`|`Optional<Utf8>`| | ||
|`Binary`|`Optional<String>`| | ||
|`ObjectId`|`Optional<String>`| |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не понятно как это всё работает, а также как «параметр READING_MODE» соотносится с «опцией TABLE». Предлагаю вынести в отдельный раздел рассказ о том как schemaless коллекции MongoDB преобразуются в таблицы и какие у этого последствия, прямо подробно и с примерами.
В частности, MongoDB вроде как не следила за тем, какие корневые поля встречаются во всех документах — откуда мы тогда берём метаданные для списка колонок, не full scan'ом коллекции же?