我刚刚发现我的MongoDB上有一个集合,我无法使用prestodb(服务器和CLI版本0.157)查询。
可以正常查询所有其他馆藏,但不能直接查询或与其他任何馆藏联系。它不是最大也不是最复杂的系列,但显然presto遇到类型问题。
java.lang.IllegalArgumentException: base is empty
at com.facebook.presto.spi.type.TypeSignature.checkArgument(TypeSignature.java:370)
at com.facebook.presto.spi.type.TypeSignature.<init>(TypeSignature.java:48)
at com.facebook.presto.spi.type.TypeSignature.parseTypeSignature(TypeSignature.java:101)
at com.facebook.presto.spi.type.TypeSignature.parseRowTypeSignature(TypeSignature.java:199)
at com.facebook.presto.spi.type.TypeSignature.parseTypeSignature(TypeSignature.java:104)
at com.facebook.presto.spi.type.TypeSignature.parseTypeSignature(TypeSignature.java:94)
at com.facebook.presto.mongodb.MongoSession.buildColumnHandle(MongoSession.java:199)
at com.facebook.presto.mongodb.MongoSession.loadTableSchema(MongoSession.java:185)
at com.facebook.presto.mongodb.MongoSession.access$000(MongoSession.java:76)
at com.facebook.presto.mongodb.MongoSession$1.load(MongoSession.java:128)
at com.facebook.presto.mongodb.MongoSession$1.load(MongoSession.java:123)
(...) very long stack trace
我已经搜索了一些与集合命名相关的问题,但是这个问题遵循相同的约定(它实际上没有下划线,其他一些也没有,并且有效)。
最可能的原因是什么?也许一个不一致的架构? (我有线索,MongoDB中的某个字段有日期,有时是整数,但这需要大量挖掘来确认)
答案 0 :(得分:0)
感谢@miniway,我发现Presto无法推断出一些嵌入式文档的完整架构。
运行
db.getCollection("_schema").findOne({"table" : "tableName"})
我注意到了一些像row()
这样的映射,这意味着Presto无法映射它。特定字段很难映射,因为它是通过pymongo
插入的通用python字典,这意味着没有固定的模式。
“解决方案”是简单地手动定义架构的那一部分,使用varchar来保存字典。