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

MongoDB

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

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

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

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

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

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

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

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

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

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

  • oid_columns - Список колонок через запятую, которые должны рассматриваться как oid в предложении WHERE. По умолчанию _id.

подсказка

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

В качестве альтернативы вы можете передать URI:

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

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

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

  • oid_columns - Список колонок через запятую, которые должны рассматриваться как oid в предложении WHERE. По умолчанию _id.

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

MongoDBClickHouse
bool, int32, int64любой числовой тип, String
doubleFloat64, String
dateDate, Date32, DateTime, DateTime64, String
stringString
documentString(как JSON)
arrayArray, String(как JSON)
oidString
binaryString, если в колонке, строка в формате base64, если в массиве или документе
uuid (binary subtype 4)UUID
любой другой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 попытается преобразовать запрос на основе лучших усилий, но это может привести к полному сканированию таблицы и обработке на стороне ClickHouse.

примечание

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

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

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

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

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

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

Запрос:

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

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

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