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

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 = <константа> ORDER BY field2 LIMIT <константа>).
Такие выражения переводятся в язык запросов 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.