MongoDB
MongoDB 引擎是只读表引擎,允许从远程 MongoDB 集合中读取数据。
仅支持 MongoDB v3.6+ 服务器。
种子列表(mongodb+srv
) 目前不受支持。
如果您遇到问题,请报告该问题,并尝试使用 遗留实现。 请记住,它已被弃用,并将在下一个版本中移除。
创建表
引擎参数
-
host:port
— MongoDB 服务器地址。 -
database
— 远程数据库名称。 -
collection
— 远程集合名称。 -
user
— MongoDB 用户。 -
password
— 用户密码。 -
options
— MongoDB 连接字符串选项(可选参数)。
如果您使用的是 MongoDB Atlas 云服务,可以通过“Atlas SQL”选项获取连接 URL。
种子列表(mongodb**+srv**
) 目前不受支持,但将在未来版本中添加。
此外,您还可以简单地传递一个 URI:
引擎参数
-
uri
— MongoDB 服务器的连接 URI -
collection
— 远程集合名称。
类型映射
MongoDB | ClickHouse |
---|---|
bool, int32, int64 | 任何数值类型, String |
double | Float64, String |
date | Date, Date32, DateTime, DateTime64, String |
string | String, UUID |
document | String(as JSON) |
array | Array, String(as JSON) |
oid | String |
binary | 如果在列中为 String,如果在数组或文档中为 base64 编码的字符串 |
其他 | String |
如果在 MongoDB 文档中未找到关键字(例如,列名不匹配),将插入默认值或 NULL
(如果列是可空的)。
支持的子句
仅支持带有简单表达式的查询(例如,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 集合中读取数据:
查询:
故障排除
您可以在 DEBUG 级别日志中查看生成的 MongoDB 查询。