Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

背景

JIRA:

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyIOTDB-2091

Pull Request: https://github.com/apache/iotdb/pull/4517

目前,IoTDB 已经很好的支持了查询表达式功能,包括 UDF 嵌套、数学运算符等高阶查询算子。但是,还不支持在聚合查询结果的基础上做进一步的计算。本功能目标就是在已有的查询框架下,支持如下查询

  1. select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.d1; 即支持聚合计算的四则运算、UDF 嵌套等。
  2. select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.d1 GROUP BY([0, 9000), 1s);  支持基于按窗口聚合的嵌套聚合计算。
  3. select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.* GROUP BY LEVEL=1; 支持基于按层级聚合的嵌套聚合计算。
  4. select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.d1 GROUP BY([0, 9000), 1s) FILL(previous); 支持嵌套聚合计算下的既有空值填充策略。

相关工作

本功能的设计与实现在逻辑层参考了 聚合查询支持表达式 的设计思路。

整体设计

任务拆解

由于目前受限于 GROUP BY LEVEL 的 ResultColumn 无法在物理计划生成时提前获得,且 FILL 填充算法目前强耦合与 GroupByEngineDataSet,不便于扩展。因此本功能计划分为三个阶段发布。

  1. 实现普通的聚合嵌套以及基于时间窗口的聚合嵌套计算功能。
  2. 实现基于层级聚合的聚合嵌套计算功能。
  3. 实现嵌套聚合计算下既有的空值填充策略。