Табличный движок MongoDB
Табличный движок MongoDB — это движок только для чтения, который позволяет читать данные из удалённой коллекции MongoDB.
Поддерживаются только серверы MongoDB версии 3.6 и выше.
Seed list (mongodb+srv) пока не поддерживается.
Создание таблицы
Параметры движка
| Параметр | Описание |
|---|---|
host:port | Адрес сервера MongoDB. |
database | Имя удалённой базы данных. |
collection | Имя удалённой коллекции. |
user | Пользователь MongoDB. |
password | Пароль пользователя. |
options | Необязательный параметр. Параметры строки подключения MongoDB options в формате URL-строки, например: 'authSource=admin&ssl=true'. |
oid_columns | Разделённый запятыми список столбцов, которые должны интерпретироваться как oid в предложении WHERE. По умолчанию _id. |
Если вы используете облачный сервис MongoDB Atlas, URL подключения можно получить в разделе «Atlas SQL».
Seed-список(mongodb**+srv**) пока не поддерживается, но поддержка будет добавлена в будущих релизах.
Либо вы можете передать URI:
Параметры движка
| Параметр | Описание |
|---|---|
uri | URI подключения к серверу MongoDB. |
collection | Имя коллекции на удалённом сервере. |
oid_columns | Список имён столбцов, разделённых запятыми, которые в предложении WHERE должны интерпретироваться как oid. По умолчанию — _id. |
Сопоставление типов
| MongoDB | ClickHouse |
|---|---|
| bool, int32, int64 | любой числовой тип, кроме Decimals, Boolean, String |
| double | Float64, String |
| date | Date, Date32, DateTime, DateTime64, String |
| string | String, любой числовой тип (кроме Decimals), если значение имеет корректный формат |
| document | String (как JSON) |
| array | Array, String (как JSON) |
| oid | String |
| binary | String, если в столбце; строка в кодировке base64, если в массиве или документе |
| uuid (binary subtype 4) | UUID |
| any other | String |
Если ключ не найден в документе MongoDB (например, имя столбца не совпадает), будет вставлено значение по умолчанию или NULL (если столбец допускает значения NULL).
OID
Если вы хотите, чтобы String обрабатывался как oid в условии WHERE, просто укажите имя столбца в последнем аргументе движка таблицы.
Это может понадобиться при выборке записи по столбцу _id, который по умолчанию имеет тип oid в MongoDB.
Если поле _id в таблице имеет другой тип, например uuid, необходимо указать пустой oid_columns, иначе по умолчанию используется значение _id для этого параметра.
По умолчанию только _id считается столбцом типа oid.
В этом случае результат будет 0, потому что ClickHouse не знает, что another_oid_column имеет тип данных oid, поэтому давайте это исправим:
Поддерживаемые предложения
Поддерживаются только запросы с простыми выражениями (например, WHERE field = <constant> ORDER BY field2 LIMIT <constant>).
Такие выражения переводятся в язык запросов MongoDB и выполняются на стороне сервера.
Вы можете отключить все эти ограничения, используя mongodb_throw_on_unsupported_query.
В этом случае ClickHouse пытается преобразовать запрос на основе принципа «best effort», но это может привести к полному сканированию таблицы и обработке на стороне ClickHouse.
Всегда лучше явно указывать тип литерала, потому что Mongo требует строго типизированных фильтров.
Например, вы хотите отфильтровать по Date:
Это не сработает, потому что Mongo не преобразует строку в Date, так что вам нужно выполнить преобразование вручную:
Это относится к Date, Date32, DateTime, Bool, UUID.
Пример использования
Предположим, что в MongoDB загружен набор данных sample_mflix.
Создайте таблицу в ClickHouse, которая позволит читать данные из коллекции в MongoDB:
Запрос:
Диагностика и устранение неполадок
Сгенерированный запрос MongoDB можно увидеть в журналах с уровнем DEBUG.
Подробности реализации приведены в документации mongocxx и mongoc.