我正在尝试使用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自己的物理计划,我需要提供:(仅是简单示例)
root.ln.d1.temperature
,我们通过这些路径执行查询。我必须将tablename(root.ln)
,deviceid(d1)
和measurement(temperature)
放在一起才能得到完整的路径。这需要扫描整个逻辑计划。LogicalFilter
的表达式转换为IoTDB的表达式,包括解析此示例中的$1
的含义。 我认为这涉及太多的工作。当查询变得更加复杂时,转换也将变得更加困难。
所以我认为也许有一种更简单的方法来完成这项工作。
答案 0 :(得分:0)
为特定数据源创建物理计划的标准方法是为该数据源创建适配器。这相当于编写可以将逻辑运算符转换为物理运算符的规则。这使数据源可以指定它可以实现哪些逻辑运算符以及如何实现。