【发布时间】:2019-12-10 08:21:27
【问题描述】:
我正在尝试使用 Calcite 为 Apache - IoTDB(时间序列数据库)设计关系表结构和标准 SQL 查询。现在我想知道如何轻松地将 Calcite 的逻辑计划转换为 IoTDB 自己的物理计划。
例如,我执行一个简单的查询:
SELECT deviceid, temperature FROM root_ln WHERE deviceid = 'd1'
经过Calcite解析后,RelNodes代表的逻辑计划是这样的:
LogicalProject(DEVICEID=[$1], TEMPERATURE=[$2])
LogicalFilter(condition=[=($1, 'd1')])
EnumerableTableScan(table=[[IoTDBSchema, ROOT_LN]])
我想将其转换为 IoTDB 自己的物理计划,我需要提供:(只是简单的示例)
- 项目的路径,如
root.ln.d1.temperature,我们通过这些路径执行查询。我必须将tablename(root.ln)、deviceid(d1)和measurement(temperature)放在一起才能获得完整的路径。这需要扫描整个逻辑计划。 - 项目的数据类型,如浮点数。我可以从路径中得到它,很简单。
- Filter 的表达式,我必须将
LogicalFilter的表达式再次转换为IoTDB 的表达式,包括解析此示例中$1的含义。
我认为这涉及太多工作。当查询变得更复杂时,转换也变得更加困难。
所以我认为也许有更简单的方法来完成这项工作。
【问题讨论】:
标签: apache-calcite