Skip to content

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
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

ninaiad
Copy link
Contributor

@ninaiad ninaiad commented May 4, 2025

Changelog entry

YDB FQ: docs for MongoDB as an external data source

Changelog category

  • Documentation (changelog entry is not required)

Description for reviewers

...

@ninaiad ninaiad requested a review from a team as a code owner May 4, 2025 08:16
Copy link

github-actions bot commented May 4, 2025

Hi! Thank you for contributing!
The tests on this PR will run after a maintainer adds an ok-to-test label to this PR manually. Thank you for your patience!

@github-actions github-actions bot added the documentation Improvements or additions to documentation label May 4, 2025
Copy link

github-actions bot commented May 4, 2025

✅ Documentation build

Revision built successfully
Revision preview link

Copy link

github-actions bot commented May 4, 2025

🟢 2025-05-04 08:19:51 UTC The validation of the Pull Request description is successful.

@blinkov blinkov added the ok-to-test Special label used to approve a PR for testing on our infrastructure label May 5, 2025
@github-actions github-actions bot removed the ok-to-test Special label used to approve a PR for testing on our infrastructure label May 5, 2025
Copy link

github-actions bot commented May 5, 2025

2025-05-05 07:52:44 UTC Pre-commit check linux-x86_64-relwithdebinfo for 1bff0cc has started.
2025-05-05 07:53:25 UTC Artifacts will be uploaded here
2025-05-05 07:56:19 UTC ya make is running...
🟢 2025-05-05 07:56:25 UTC Tests successful.

Test history | Ya make output | Test bloat

TESTS PASSED ERRORS FAILED SKIPPED MUTED?
0 0 0 0 0 0

🟢 2025-05-05 07:56:31 UTC Build successful.

@ydbot
Copy link
Collaborator

ydbot commented May 5, 2025

🔄 New commits pushed — @blinkov please take a look.

Copy link

github-actions bot commented May 5, 2025

2025-05-05 07:55:02 UTC Pre-commit check linux-x86_64-release-asan for 1bff0cc has started.
2025-05-05 07:55:13 UTC Artifacts will be uploaded here
2025-05-05 07:57:24 UTC ya make is running...
🟢 2025-05-05 07:57:29 UTC Tests successful.

Test history | Ya make output | Test bloat

TESTS PASSED ERRORS FAILED SKIPPED MUTED?
0 0 0 0 0 0

🟢 2025-05-05 07:57:34 UTC Build successful.


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` подразумевает отображение каждого корневого поля документа в отдельную колонку таблицы.
Copy link
Member

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'ом коллекции же?

При работе с кластерами MongoDB существует ряд ограничений:

1. {% include [!](_includes/supported_requests.md) %}
1. {% include [!](_includes/predicate_pushdown.md) %}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут точно ровно те же ограничения, как и в источниках с поддержкой SQL?


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 }} оно также будет опциональным.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не понятно почему разные типы в MongoDB приводят к опциональности _id и в каких случаях там окажется NULL. Я б скорее ожидал, что тип данных будет расширяться вплоть до бинарной строки.


## Поддерживаемые типы данных

MongoDB - это NoSQL-СУБД, предназначенная для работы с неструктурированными и полуструктурированными данными. В отличие от реляционных баз данных, MongoDB хранит JSON-подобные документы, которые как правило не соответствуют единому формату или структуре. В связи с этим, для преобразования данных MongoDB в реляционный формат, необходимый для выполнения SQL запросов, {{ ydb-full-name }} автоматически выводит схему MongoDB при выполнении запроса с помощью небольшого скана коллекции. В случае обработки документов, в которых одинаковые поля представлены разными неприводимыми типами (например, `Int32` и `String`), они будут представлены в запросе в сериализованном виде, а тип {{ ydb-full-name }} для них будет соответствовать `Optional<Utf8>`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подробнее описать что означает «в сериализованном виде». Например, не понятно как произвольные бинарные данные будут запакованы в Optional<Utf8>.

@blinkov blinkov requested a review from Copilot May 5, 2025 08:15
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

ninaiad and others added 4 commits May 5, 2025 19:31
Co-authored-by: Ivan Blinkov <ivan@blinkov.ru>
Co-authored-by: Ivan Blinkov <ivan@blinkov.ru>
Co-authored-by: Ivan Blinkov <ivan@blinkov.ru>
Co-authored-by: Ivan Blinkov <ivan@blinkov.ru>
@ydbot
Copy link
Collaborator

ydbot commented May 5, 2025

🔄 New commits pushed — @blinkov please take a look.

Copy link

github-actions bot commented May 5, 2025

✅ Documentation build

Revision built successfully
Revision preview link

@blinkov blinkov added the ok-to-test Special label used to approve a PR for testing on our infrastructure label May 6, 2025
@github-actions github-actions bot removed the ok-to-test Special label used to approve a PR for testing on our infrastructure label May 6, 2025
@blinkov
Copy link
Member

blinkov commented May 6, 2025

Some review comments are still unresolved.

@ydbot
Copy link
Collaborator

ydbot commented May 6, 2025

🔄 New commits pushed — @blinkov please take a look.

Copy link

github-actions bot commented May 6, 2025

2025-05-06 02:08:53 UTC Pre-commit check linux-x86_64-release-asan for c589d96 has started.
2025-05-06 02:09:19 UTC Artifacts will be uploaded here
2025-05-06 02:12:05 UTC ya make is running...
🟢 2025-05-06 02:12:14 UTC Tests successful.

Test history | Ya make output | Test bloat

TESTS PASSED ERRORS FAILED SKIPPED MUTED?
0 0 0 0 0 0

🟢 2025-05-06 02:12:20 UTC Build successful.

Copy link

github-actions bot commented May 6, 2025

2025-05-06 02:31:36 UTC Pre-commit check linux-x86_64-relwithdebinfo for c589d96 has started.
2025-05-06 02:31:52 UTC Artifacts will be uploaded here
2025-05-06 02:34:25 UTC ya make is running...
🟢 2025-05-06 02:34:34 UTC Tests successful.

Test history | Ya make output | Test bloat

TESTS PASSED ERRORS FAILED SKIPPED MUTED?
0 0 0 0 0 0

🟢 2025-05-06 02:34:40 UTC Build successful.

@ydbot
Copy link
Collaborator

ydbot commented May 16, 2025

Heads-up: it's been 8 business-days since a reviewer comment. @ninaiad, any updates? @blinkov, please check the status with the author.

@ydbot
Copy link
Collaborator

ydbot commented May 28, 2025

Heads-up: it's been 8 business-days since a reviewer comment. @ninaiad, any updates? @blinkov, please check the status with the author.

@blinkov blinkov marked this pull request as draft June 4, 2025 01:59
@blinkov blinkov assigned anton-bobkov and unassigned blinkov Jun 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation external
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants