如何在Apache Drill中为Mongo存储插件实现INNER JOINS(下推)的优化?

2022-09-03 16:11:48

我想扩展Apache Drill Mongo Storage插件来向下推送INNER JOIN。因此,我想重写到 mongo 聚合管道中。INNER JOIN

我们需要如何开始在Apache Drill中实现重写。

下面是一个 SQL 示例:

SELECT *
FROM `mymongo.db`.`test` `test`
  INNER JOIN `mymongo.db`.`test2` `test2`
  ON (`test`.`id` = `test2`.`fk`)
WHERE `test2`.`date` = '09.05.2017'

我在Mongo存储插件中找到了子句的推送。但是我仍然在努力做同样的事情。的构造器会是什么样子?我必须实现哪个等效项(抽象组扫描)?任何帮助将不胜感激。WHEREINNER JOINSpublic class MongoPushDownInnerJoinScan extends StoragePluginOptimizerRuleMongoGroupScan


答案 1

如果要使用类似于 SQL 的聚合框架进行内部联接,则可以使用管道阶段$lookup执行此操作。

$lookup:
    {
    from: <collection to join>,
    localField: <field from the input documents>,
    foreignField: <field from the documents of the "from" collection>,
    as: <output array field>
    }
}

答案 2