前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目动态 | Apache IoTDB 新功能发布:数据查询支持嵌套表达式应用

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

作者头像
Apache IoTDB
发布2022-01-26 14:53:29
5910
发布2022-01-26 14:53:29
举报
文章被收录于专栏:Apache IoTDBApache IoTDB

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

1

升级指南

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

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

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

代码语言:javascript
复制
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

功能定义

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

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

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

3

使用说明

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); -- 空值填充
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Apache IoTDB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
时序数据库 CTSDB
腾讯云时序数据库(TencentDB for CTSDB)是一种高效、安全、易用的云上时序数据存储服务。特别适用于物联网、大数据和互联网监控等拥有海量时序数据的场景。您可以根据实际业务需求快速创建CTSDB 实例,并随着业务变化实时线性扩展实例。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档