MongoDB
Движок MongoDB — это движок таблиц только для чтения, который позволяет считывать данные из удаленной MongoDB коллекции.
Поддерживаются только серверы MongoDB v3.6+.
Список начальных узлов (mongodb+srv
) пока не поддерживается.
Создание таблицы
Параметры движка
Параметр | Описание |
---|---|
host:port | Адрес сервера MongoDB. |
database | Название удаленной базы данных. |
collection | Название удаленной коллекции. |
user | Пользователь MongoDB. |
password | Пароль пользователя. |
options | Необязательно. Строка подключения MongoDB параметров в формате URL. Например, 'authSource=admin&ssl=true' |
oid_columns | Список столбцов, разделенных запятыми, которые должны обрабатываться как oid в условии WHERE. По умолчанию это _id . |
Если вы используете облачное предложение MongoDB Atlas, URL для подключения можно получить из опции 'Atlas SQL'.
Список начальных узлов (mongodb**+srv**
) пока не поддерживается, но будет добавлен в будущих релизах.
Кроме того, вы можете передать URI:
Параметры движка
Параметр | Описание |
---|---|
uri | URI подключения к серверу MongoDB. |
collection | Название удаленной коллекции. |
oid_columns | Список столбцов, разделенных запятыми, которые должны обрабатываться как oid в условии WHERE. По умолчанию это _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 (подтип двоичного 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.