Skip to content

Commit c589d96

Browse files
authored
Merge 18e737a into 25bf032
2 parents 25bf032 + 18e737a commit c589d96

File tree

1 file changed

+91
-0
lines changed
  • ydb/docs/ru/core/concepts/federated_query

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# Работа с базами данных MongoDB
2+
3+
В этом разделе приведена основная информация о работе с внешней NoSQL-базой данных [MongoDB](https://www.mongodb.com/).
4+
5+
Для работы с внешней базой данных MongoDB необходимо выполнить следующие шаги:
6+
7+
1. Создать [секрет](../datamodel/secrets.md), содержащий пароль для подключения к базе данных.
8+
9+
```yql
10+
CREATE OBJECT mongodb_datasource_user_password (TYPE SECRET) WITH (value = "<password>");
11+
```
12+
13+
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"`.
14+
15+
Параметр `READING_MODE` определяет то, каким образом документ из MongoDB будет представлен в реляционном формате: опция `TABLE` подразумевает отображение каждого корневого поля документа в отдельную колонку таблицы.
16+
17+
В параметре `UNSUPPORTED_TYPE_DISPLAY_MODE` указывается политика обработки типов данных MongoDB, которые пока не поддерживаются в {{ ydb-full-name }}. Можно выбрать один из двух вариантов: в случае `UNSUPPORTED_OMIT` поля неподдерживаемых типов будут пропущены в результате запроса, а с `UNSUPPORTED_AS_STRING` запрос вернёт значение подобных полей в сериализованном виде как тип `Utf8`. Подробнее о том, как система типов MongoDB отображается в {{ ydb-full-name }}, можно прочитать в разделе [«Поддерживаемые типы данных»](#supported-data-types).
18+
19+
Опция `UNEXPECTED_TYPE_DISPLAY_MODE` отвечает за представление значений, которые оказались несовместимы с выведенной структурой документов MongoDB. При чтении данных из внешнего источника MongoDB {{ ydb-full-name }} автоматически выводит структуру документов коллекции с помощью небольшого скана. Поскольку данные MongoDB неструктурированы, отдельные документы коллекции могут не соответствовать полученной схеме. С опцией `UNEXPECTED_AS_NULL` подобные поля будут пропускаться вне зависимости от выведенного типа, а с опцией `UNEXPECTED_AS_STRING` значения полей неприводимых типов будут сериализованы в строки `Utf8`, если ожидаемый тип подобных полей в выведенной схеме — `Utf8`.
20+
21+
```yql
22+
CREATE EXTERNAL DATA SOURCE mongodb_datasource WITH (
23+
SOURCE_TYPE="MongoDB",
24+
LOCATION="<host>:<port>",
25+
DATABASE_NAME="<database>",
26+
AUTH_METHOD="BASIC",
27+
LOGIN="<login>",
28+
PASSWORD_SECRET_NAME="mongodb_datasource_user_password",
29+
USE_TLS="TRUE",
30+
READING_MODE="TABLE",
31+
UNSUPPORTED_TYPE_DISPLAY_MODE="UNSUPPORTED_OMIT",
32+
UNEXPECTED_TYPE_DISPLAY_MODE="UNEXPECTED_AS_NULL"
33+
);
34+
```
35+
36+
1. {% include [!](_includes/connector_deployment.md) %}
37+
1. [Выполнить запрос](#query) к базе данных.
38+
39+
## Синтаксис запросов {#query}
40+
41+
Для работы с MongoDB используется следующая форма SQL-запроса:
42+
43+
```yql
44+
SELECT * FROM mongodb_datasource.<collection_name>
45+
```
46+
47+
где:
48+
49+
- `mongodb_datasource` - идентификатор внешнего источника данных;
50+
- `<collection_name>` - имя коллекции внутри внешнего источника данных.
51+
52+
## Ограничения
53+
54+
При работе с кластерами MongoDB существует ряд ограничений:
55+
56+
1. {% include [!](_includes/supported_requests.md) %}
57+
1. {% include [!](_includes/predicate_pushdown.md) %}
58+
59+
|Тип данных {{ ydb-short-name }}|
60+
|----|
61+
|`Bool`|
62+
|`Int8`|
63+
|`Uint8`|
64+
|`Int16`|
65+
|`Uint16`|
66+
|`Int32`|
67+
|`Uint32`|
68+
|`Int64`|
69+
|`Uint64`|
70+
|`Float`|
71+
|`Double`|
72+
|`String`|
73+
|`Utf8`|
74+
75+
## Поддерживаемые типы данных {#supported-data-types}
76+
77+
MongoDB — это NoSQL-СУБД, предназначенная для работы с неструктурированными и полуструктурированными данными. В отличие от реляционных баз данных, MongoDB хранит JSON-подобные документы, которые, как правило, не соответствуют единому формату или структуре. В связи с этим для преобразования данных MongoDB в реляционный формат, необходимый для выполнения SQL-запросов, {{ ydb-full-name }} автоматически выводит схему MongoDB при выполнении запроса с помощью небольшого сканирования коллекции. В случае обработки документов, в которых одинаковые поля представлены разными неприводимыми типами (например, `Int32` и `String`), они будут представлены в запросе в сериализованном виде, а тип {{ ydb-full-name }} для них будет соответствовать `Optional<Utf8>`.
78+
79+
Любые поля MongoDB, кроме `_id`, по умолчанию могут быть опущены или содержать значения `NULL`, и в системе типов {{ ydb-full-name }} они должны отображаться в [опциональные](../../yql/reference/types/optional.md) типы. Поскольку поле `_id` в разных документах одной коллекции может иметь разные типы, в системе типов {{ ydb-full-name }} оно также будет опциональным.
80+
81+
Ниже приведена таблица соответствия типов MongoDB и {{ ydb-short-name }}. Все остальные типы данных, за исключением перечисленных, не поддерживаются и не могут быть использованы в пушдауне предикатов. Однако поля таких типов всё ещё могут использоваться в качестве возвращаемого значения запроса в сериализованном виде как `Optional<Utf8>` при включении параметра `UNSUPPORTED_TYPE_DISPLAY_MODE=UNSUPPORTED_AS_STRING`.
82+
83+
|Тип данных MongoDB|Тип данных {{ ydb-full-name }}
84+
|---|---|
85+
|`Boolean`|`Optional<Bool>`|
86+
|`Int32`|`Optional<Int32>`|
87+
|`Int64`|`Optional<Int64>`|
88+
|`Double`|`Optional<Double>`|
89+
|`String`|`Optional<Utf8>`|
90+
|`Binary`|`Optional<String>`|
91+
|`ObjectId`|`Optional<String>`|

0 commit comments

Comments
 (0)