如何将方解石逻辑计划转换为另一个数据引擎的物理计划?

时间:2019-12-10 08:21:27

标签: apache-calcite

我正在尝试使用Calcite为Apache-IoTDB(时间序列数据库)设计关系表结构和标准SQL查询。现在我想知道如何轻松地将Calcite的逻辑计划转换为IoTDB自己的物理计划。

例如,我执行一个简单的查询:

SELECT deviceid, temperature FROM root_ln WHERE deviceid = 'd1'

用方解石解析后,RelNode所代表的逻辑计划如下:

LogicalProject(DEVICEID=[$1], TEMPERATURE=[$2])
  LogicalFilter(condition=[=($1, 'd1')])
    EnumerableTableScan(table=[[IoTDBSchema, ROOT_LN]])

我想将其转换为IoTDB自己的物理计划,我需要提供:(仅是简单示例)

  1. 项目的路径,例如root.ln.d1.temperature,我们通过这些路径执行查询。我必须将tablename(root.ln)deviceid(d1)measurement(temperature)放在一起才能得到完整的路径。这需要扫描整个逻辑计划。
  2. 项目的数据类型,例如float。我可以从路径中获取它,这很简单。
  3. 过滤器的表达式,我必须再次将LogicalFilter的表达式转换为IoTDB的表达式,包括解析此示例中的$1的含义。

我认为这涉及太多的工作。当查询变得更加复杂时,转换也将变得更加困难。

所以我认为也许有一种更简单的方法来完成这项工作。

1 个答案:

答案 0 :(得分:0)

为特定数据源创建物理计划的标准方法是为该数据源创建适配器。这相当于编写可以将逻辑运算符转换为物理运算符的规则。这使数据源可以指定它可以实现哪些逻辑运算符以及如何实现。