THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
背景
JIRA:
Pull Request: https://github.com/apache/iotdb/pull/4517
目前,IoTDB 已经很好的支持了查询表达式功能,包括 UDF 嵌套、数学运算符等高阶查询算子。但是,还不支持在聚合查询结果的基础上做进一步的计算。本功能目标就是在已有的查询框架下,支持如下查询
- select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.d1; 即支持聚合计算的四则运算、UDF 嵌套等。
- select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.d1 GROUP BY([0, 9000), 1s); 支持基于按窗口聚合的嵌套聚合计算。
- select sum(s1) + sum(s2), -sum(s3), sum(s4) + 1, sin(cos(sum(s5))) from root.sg.* GROUP BY LEVEL=1; 支持基于按层级聚合的嵌套聚合计算。
- 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,不便于扩展。因此本功能计划分为三个阶段发布。
- 实现普通的聚合嵌套以及基于时间窗口的聚合嵌套计算功能。
- 实现基于层级聚合的聚合嵌套计算功能。
- 实现嵌套聚合计算下既有的空值填充策略。