方解石elasticsearch适配器有效联接

时间:2018-11-15 19:20:21

标签: elasticsearch join apache-calcite

实现JOIN重写以允许将子查询的结果提供给查询的正确方法是什么? 例如:

SELECT state  FROM zips_view WHERE j IN (select j from people_view)

此查询被重写为SemiJoin,SemiJoin执行表扫描内部查询(按预期再次选择_people_view_),然后再次表扫描进行外部查询(针对_zips_view_选择)。第二次扫描可以替换为过滤查询,例如

SELECT state FROM zips_iew WHERE j IN (1,2,3,4)

实现“两阶段” JOIN并接收子查询结果并将其作为过滤器/条件添加到外部查询的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我在这里使用JDBC连接器,并用于您所需的查询:

SELECT state FROM zips_iew WHERE j IN (1,2,3,4)

它生成此关系代数:

LogicalProject(state=[$0])
  LogicalFilter(condition=[OR(=($0, 1), =($0, 2), =($0, 3), =($0, 4))])
    JdbcTableScan(table=[[zips_iew, state]])

您应该首先编写规则来转换原始的关系代数(使用SemiJoin),然后逐步研究以获得上面所示的关系代数。