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.
Сопоставление типов
| MongoDB | ClickHouse | 
|---|---|
| bool, int32, int64 | любой числовой тип, String | 
| double | Float64, String | 
| date | Date, Date32, DateTime, DateTime64, String | 
| string | String | 
| document | String(как JSON) | 
| array | Array, String(как JSON) | 
| oid | String | 
| binary | String, если в колонке, строка в формате 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.
