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 = <константа> 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.