Docker网络中Trino查询MongoDB报错:无列关系不允许SELECT *
问题描述
在Docker网络中部署Trino与MongoDB后,配置的mongodb.properties内容如下:
connector.name=mongodb mongodb.connection-url=mongodb://admin:admin@mongodb:27017/admin
已创建包含数据的publication集合(_id为主键),通过Mongo Shell可正常查询所有数据,但在Trino Shell执行查询语句SELECT * FROM mongodb.db_name.Publication时,出现错误:
Query failed: SELECT * not allowed from relation that has no columns
已在配置文件中添加mongodb.case-insensitive-name-matching=true,且PostgreSQL连接器执行相同操作完全正常,请问遗漏了什么?
排查与解决方法
- 核对集合名称大小写:虽然开了
mongodb.case-insensitive-name-matching=true,但试试用全小写集合名查询:SELECT * FROM mongodb.db_name.publication。MongoDB集合名本身区分大小写,开关可能在部分场景下没完全生效。 - 查看集合元数据:先执行
DESCRIBE mongodb.db_name.Publication,如果返回空,说明Trino没读到集合字段信息。此时重启Trino服务,确保mongodb.case-insensitive-name-matching=true的配置生效——有些配置改完必须重启才会加载。 - 检查用户权限:确认连接用的
admin用户有目标库db_name的读权限。在Mongo Shell里执行db.getRoles({showPrivileges: true})查看权限,Trino需要能读取集合结构的权限才能识别字段。 - 验证版本兼容性:旧版本MongoDB和Trino的MongoDB连接器可能存在元数据读取兼容问题,检查两者版本是否匹配,必要时升级连接器或MongoDB。
- 尝试指定字段查询:如果
SELECT *不行,试试查具体字段,比如SELECT _id FROM mongodb.db_name.Publication。如果能返回结果,说明集合里有动态字段导致Trino元数据读取异常,可在配置里加mongodb.mapping=dynamic让Trino自动识别动态字段。
内容的提问来源于stack exchange,提问作者madmax18
相关产品推荐
相关产品推荐

