我正在研究概念验证,以优化通过钻取执行的连接查询的性能。底层存储是基于NO-SQL的数据库 - Mongo DB。返回连接查询结果所需的时间为46秒。经过进一步分析,根据查询的物理计划,观察到左侧(150万条记录)和右侧表格(130万条)都被完全扫描,分别需要24秒和20秒。
以下是查询:
select ta.[SOME_COLUMN]
from mongo.Test.TABLEA ta
INNER JOIN mongo.Test.TABLEB ta ON ta.Id = tb.Id and ta.Id ='123'
表A中的记录:150万
表B中的记录:130万
过滤条件:Id是两个表中的索引字段(升序)
钻取计划显示正在执行散列连接:
答案 0 :(得分:2)
Drill的MongoDB存储插件不支持下推连接。它仅支持按下过滤器。
存储插件负责与Drill支持的数据源进行通信。
如果您愿意,您必须提供自己的优化规则以下推联接。这将需要Apache Calcite经验并编写一个新的存储插件来提供这些规则。
我不知道是否有其他方式可以提供新规则,除非有自定义插件。该插件不应该处理MongoDB,它只需要提供必要的规则。