【问题标题】:calcite elasticsearch adapter efficient join方解石弹性搜索适配器高效连接
【发布时间】:2019-05-16 17:54:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: elasticsearch join apache-calcite


【解决方案1】:

我在这里使用 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),然后逐步获得如上所示的关系代数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2021-08-08
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多