Перейти к основному содержимому
Перейти к основному содержимому

MongoDB

MongoDB engine это колоночный движок таблиц, который позволяет читать данные из удаленной MongoDB коллекции.

Поддерживаются только серверы MongoDB версии 3.6 и выше. Seed list(mongodb+srv) пока не поддерживается.

примечание

Если у вас возникли проблемы, пожалуйста, сообщите о них и попробуйте использовать наследственную реализацию. Имейте в виду, что она устарела и будет удалена в следующих релизах.

Создание таблицы

Параметры движка

  • host:port — адрес сервера MongoDB.

  • database — имя удаленной базы данных.

  • collection — имя удаленной коллекции.

  • user — пользователь MongoDB.

  • password — пароль пользователя.

  • options — параметры строки подключения MongoDB (опциональный параметр).

подсказка

Если вы используете облачное предложение MongoDB Atlas, URL подключения можно получить из опции 'Atlas SQL'. Seed list(mongodb**+srv**) пока не поддерживается, но будет добавлен в будущих релизах.

Также вы можете просто передать URI:

Параметры движка

  • uri — URI для подключения к серверу MongoDB.

  • collection — имя удаленной коллекции.

Сопоставление типов

MongoDBClickHouse
bool, int32, int64любой числовой тип, String
doubleFloat64, String
dateDate, Date32, DateTime, DateTime64, String
stringString, UUID
documentString(как JSON)
arrayArray, String(как JSON)
oidString
binaryString, если в колонке, строка в base64, если в массиве или документе
любой другойString

Если ключ не найден в документе MongoDB (например, имя колонки не совпадает), будет вставлено значение по умолчанию или NULL (если колонка допускает значение NULL).

Поддерживаемые конструкции

Поддерживаются только запросы с простыми выражениями (например, WHERE field = <constant> ORDER BY field2 LIMIT <constant>). Эти выражения переводятся на язык запросов MongoDB и выполняются на стороне сервера. Вы можете отключить все эти ограничения, установив mongodb_throw_on_unsupported_query. В этом случае ClickHouse попытается преобразовать запрос наилучшим образом, но это может привести к полному сканированию таблицы и обработке на стороне ClickHouse.

примечание

Всегда лучше явно установить тип литерала, поскольку Mongo требует строгую типизацию фильтров.
Например, если вы хотите фильтровать по Date:

Это не сработает, потому что Mongo не приведет строку к Date, поэтому вам нужно привести её вручную:

Это применимо для Date, Date32, DateTime, Bool, UUID.

Пример использования

Предположим, что в MongoDB загружен набор данных sample_mflix.

Создайте таблицу в ClickHouse, которая позволяет читать данные из коллекции MongoDB:

Запрос:

Устранение неполадок

Вы можете увидеть сгенерированный запрос MongoDB в логах уровня DEBUG.

Детали реализации можно найти в документациях mongocxx и mongoc.