通过Apache Drill

时间:2017-10-30 20:36:07

标签: mongodb apache-drill

我们有一个关于通过Mongo存储插件进行MongoDB和Drill集成的问题;我们需要使用MongoDB地理空间函数通过Drill查询和执行地理空间查询。这意味着我们在Mongo中有数据并且使用Drill我们需要调用那些Mongo函数。 例如,考虑我们在Mongo中有一个区域集合,其区域信息包括geojson。直接在Mongo中,我们可以使用$geoIntersects Mongo函数(找到与特定Point相交的区域)执行以下查询,并获得成功结果:

db.getCollection('zones').find({ geom: { $geoIntersects: { $geometry: { type: "Point", coordinates: [ -73.93414657, 40.82302903 ] } } } })

主要问题:

是否可以在Drill中使用Mongo地理空间查询运算符?我们该怎么做?

另外,如果我们想要执行上述相同的查询但是使用Drill,那可能吗?如果是的话,我们怎么做呢?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Apache Drill的Mongo存储插件充当Mongo客户端的外观,此外观不支持底层Mongo客户端的所有功能。 $geoIntersects$geometry运算符不受支持或以其他方式表示; Apache Drill的Mongo存储插件不知道那些运营商。

original documentation for Apache Drill's Mongo storage plugin声明:

  

截至目前,谓词下推是针对以下过滤器实施的:>,> =,<,< =,==,!=,isNull和isNotNull。

查看latest version of the code情况仍然存在。

所以,这个问题的答案......

  

是否可以在Drill中使用Mongo地理空间查询运算符?

...是:。 Apache Drill的Mongo存储插件仅支持以下查询运算符:>, >=, <, <=, ==, !=, isNull and isNotNull

这个问题的答案......

  

另外,如果我们想要执行上述相同的查询但是使用Drill,那可能吗?

... 。请记住,Apache Drill的Mongo存储插件试图在文档存储上提供SQL式查询功能,而$geoIntersects$geometry等地理空间查询操作符在SQL中没有通用的,易于理解的等价物。

不幸的是,在上面的回复中对你没有好消息:(我认为你的选择是

  • 亲自实施。有一个附加到this issue的补丁,可能会为如何在Apache Drill的Mongo存储插件中实现新的查询运算符提供指导
  • 针对指定Component=Storage - MongoDB
  • Drill project提出问题