项目动态 | Apache IoTDB 新功能发布:数据查询支持嵌套表达式应用

98130c404e3fd883bc369de690502feb.png

工业物联网时序数据库管理系统 Apache IoTDB 是支持物联网时序数据收集、存储、查询与分析一体化的数据管理引擎,支持“端-边-云”一体化部署,适用于高端装备、工厂设备、高速网联设备等多种数据管理场景,是工业互联网时序数据管理的核心基础支撑。

1

outside_default.png

升级指南

b51995aa98a92e5ba706bfdb3d3cc1f2.gif

0.13正式版预计春节前发布,新功能陆续发布中,欢迎大家积极使用!

数据查询支持嵌套表达式计算

▎在0.12版本及以前版本中,数据查询不支持表达式运算,如下查询是不支持的:

IoTDB> select a + b from root.sg
Msg: 401: Error occurred while parsing SQL to physical plan: line 1:9 mismatched input '+' expecting {FROM, ',', '.', '*'}

▎在最新的0.13版本中,数据查询中支持使用嵌套表达式进行计算。例如,在某电器监控场景下,监控某设备root.sg.device1。现在有电压时间序列 root.sg.device.u ,电流时间序列 root.sg.device1.i,若我们希望查看设备在各个时间戳下的功率,可以通过SQL语句 “SELECT u*i FROM root.sg”来完成。

2

outside_default.png

功能定义

1da66b37abe0f24fb0b815f9c7494b02.gif

我们根据是否包含聚合查询函数将嵌套表达式分为两类,聚合查询函数不能和时间序列或时间序列生成函数同时出现在一个查询语句中。下面是嵌套表达式的功能定义。

  • 支持在 select 子句中计算由时间序列,时间序列生成函数(包括用户自定义函数) 、数字常量和算数运算表达式组成的任意嵌套表达式

  • 支持在 select 子句中计算由聚合查询和其他运算组成的任意嵌套表达式

下图是在ANTLR中对嵌套表达式相关功能的语法定义。在官方用户手册中也有相应解释。

ac5b0b6e1c31bb58a95c7ca2051d34ce.png

3

outside_default.png

使用说明

19fedeb22c7ed8aeb5182c395334581b.gif

3.1 不包括聚合查询的嵌套表达式

▎示例:

  • select a, b , a + b from root.sg

  • select a, b, ((a + 1) * 2 - 1) % 2 + 1.5 + b from root.sg

  • select a, b, sin(a + sin(a + sin(b))) from root.sg

  • select a + * from root.sg

  • select a + b from root.sg, root.ln

▎注意点:

某时间戳下,只有左右操作数的值均不为null,表达式才会有结果,否则表达式值为null,且默认不显示。

如果表达式中某个操作数对应多条时间序列(如 select a + * from root.sg),那么每条时间序列对应的结果都会出现在结果集中。

3.2 包括聚合查询的嵌套表达式

▎示例:

  • SELECT count(a), ((count(a) + 1) * 2 - 1) % 2 + 1.5 FROM root.sg

  • SELECT avg(a), sin(avg(a)), sin(avg(a)) - count(a) FROM root.sg

  • SELECT avg(a), (sin(avg(a)) + 1) * 2 - 3 FROM root.sg GROUP BY ([10,90),10ms)

▎注意点:

  • 某时间戳下,只有左右操作数的值均不为null,表达式才会有结果,否则表达式值为null,但在group by time场景下,我们希望看到每个窗口的值,所以null也默认显示。

  • 聚合计算目前只能当做最底层表达式输入,暂不支持聚合函数内部出现表达式。填充算子(fill)和按层级聚合(group by level)查询暂时不支持,在后续版本会支持。下面是目前不支持的表达式的例子:

    1. SELECT avg(s1+1) FROM root.sg.d1; -- 聚合函数内部有表达式

    2. SELECT avg(s1) + avg(s2) FROM root.sg.* GROUP BY LEVEL=1; -- 按层级聚合

    3. SELECT avg(s1) + avg(s2) FROM root.sg.d1 GROUP BY([0, 10000), 1s) FILL(previous); -- 空值填充

欢迎加入

Apache IoTDB

参与开源,可以获得公司及社区内外的认可,结交来自各个领域、志同道合的小伙伴;同时也可以提高个人影响力,促进个人发展。参与开源不是开发者的专属,社区、文档等各个方面都可以让大家发挥一技之长。

作为全球性开源项目,截至目前,Apache IoTDB已拥有 160+ 名贡献者、1.7KStar、500+ Fork。我们为大家提供了参与指南,欢迎越来越多的小伙伴助力 Apache IoTDB项目的不断发展与前进。

欢迎迈出加入 Apache IoTDB 社区的第一步!

QQ群:659990460

微信群:添加好友qinchuqing/tietouqiao

github仓库:https://github.com/apache/iotdb

官网:http://iotdb.apache.org/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值