关于tdengine:一文读懂-TDengine-的三种查询功能

13次阅读

共计 3258 个字符,预计需要花费 9 分钟才能阅读完成。

小 T 导读:作为一款业余的时序数据库(Time Series Database,TSDB),为满足用户在不同场景下的查问需要,TDengine 提供了丰盛的查问性能。除了一些次要的查问外,还包含多表聚合查问、降采样查问及间断查问,本文将从实际操作层面对这三种非凡查问进行解读。

查问数据

次要查问性能

TDengine 采纳 SQL 作为查询语言,应用程序能够通过 REST API 或连接器发送 SQL 语句,用户还能够通过 TDengine 命令行工具 taos 手动执行 SQL 即席查问(Ad-Hoc Query)。TDengine 反对如下查问性能:

  • 单列、多列数据查问
  • 标签和数值的多种过滤条件:>, <, =, <>, like 等
  • 聚合后果的分组(Group by)、排序(Order by)、束缚输入(Limit/Offset)
  • 数值列及聚合后果的四则运算
  • 工夫戳对齐的连贯查问(Join Query: 隐式连贯)操作
  • 多种聚合 / 计算函数: count, max, min, avg, sum, twa, stddev, leastsquares, top, bottom, first, last, percentile, apercentile, last_row, spread, diff 等

例如:在命令行工具 taos 中,咱们须要从表 d1001 中查问出 voltage > 215 的记录,按工夫降序排列,仅仅输入如下 2 条后果。

taos> select * from d1001 where voltage > 215 order by ts desc limit 2;
           ts            |       current        |   voltage   |        phase         |
======================================================================================
 2018-10-03 14:38:16.800 |             12.30000 |         221 |              0.31000 |
 2018-10-03 14:38:15.000 |             12.60000 |         218 |              0.33000 |
Query OK, 2 row(s) in set (0.001100s)

为满足物联网场景的需要,TDengine 还反对几个非凡的函数,比方 twa(工夫加权均匀)、spread (最大值与最小值的差)、last_row(最初一条记录)等,将来还将有更多与物联网场景相干的函数增加进来。

多表聚合查问

在物联网场景中,往往同一个类型的数据采集点有多个。TDengine 采纳超级表 (STable) 的概念来形容某一个类型的数据采集点,一张一般的表来形容一个具体的数据采集点。同时 TDengine 应用标签来形容数据采集点的动态属性,一个具体的数据采集点有具体的标签值。

通过指定标签的过滤条件,TDengine 实现了将超级表 (某一类型的数据采集点) 所属的子表对立进行聚合查问。值得一提的是,对一般表的聚合函数以及绝大部分操作都实用于超级表,语法齐全一样。

示例一

在 TAOS Shell 查找加利福尼亚州所有智能电表采集的电压平均值,并依照 location 分组。代码如下所示:

taos> SELECT AVG(voltage) FROM meters GROUP BY location;
       avg(voltage)        |            location            |
=============================================================
             222.000000000 | California.LosAngeles                |
             219.200000000 | California.SanFrancisco               |
Query OK, 2 row(s) in set (0.002136s)

示例二

在 TAOS shell 查找 groupId 为 2 的所有智能电表过来 24 小时的记录条数,电流的最大值。代码如下所示:

taos> SELECT count(*), max(current) FROM meters where groupId = 2 and ts > now - 24h;
     cunt(*)  |    max(current)  |
==================================
            5 |             13.4 |
Query OK, 1 row(s) in set (0.002136s)

须要留神的是,TDengine 仅答应对同属于一个超级表的表之间进行聚合查问,不同超级表之间的聚合查问并不反对。

降采样查问、插值

除了上述场景,在物联网场景中,咱们还常常须要通过降采样(down sampling)将采集的数据按时间段进行聚合。TDengine 提供了一个简便的关键词——interval(等距离窗口),让依照工夫窗口进行的查问操作变得极为简略。比方,对智能电表 d1001 采集的电流值按每 10 秒钟求和:

taos> SELECT sum(current) FROM d1001 INTERVAL(10s);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:00.000 |              10.300000191 |
 2018-10-03 14:38:10.000 |              24.900000572 |
Query OK, 2 row(s) in set (0.000883s)

同样,降采样操作也实用于超级表,比方将加利福尼亚州所有智能电表采集的电流值按每秒钟求和:

taos> SELECT SUM(current) FROM meters where location like "California%" INTERVAL(1s);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:04.000 |              10.199999809 |
 2018-10-03 14:38:05.000 |              32.900000572 |
 2018-10-03 14:38:06.000 |              11.500000000 |
 2018-10-03 14:38:15.000 |              12.600000381 |
 2018-10-03 14:38:16.000 |              36.000000000 |
Query OK, 5 row(s) in set (0.001538s)

此外,降采样操作也反对工夫偏移,比方:将所有智能电表采集的电流值按每秒钟求和,但要求每个工夫窗口从 500 毫秒开始:

taos> SELECT SUM(current) FROM meters INTERVAL(1s, 500a);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:04.500 |              11.189999809 |
 2018-10-03 14:38:05.500 |              31.900000572 |
 2018-10-03 14:38:06.500 |              11.600000000 |
 2018-10-03 14:38:15.500 |              12.300000381 |
 2018-10-03 14:38:16.500 |              35.000000000 |
Query OK, 5 row(s) in set (0.001521s)

家喻户晓,在物联网场景里每个数据采集点采集数据的工夫较难同步,但很多剖析算法 (比方 FFT) 须要把采集的数据严格依照工夫等距离地对齐,在很多零碎里,这须要利用本人写程序来解决,但应用 TDengine 的降采样操作这个需要便能轻松解决了。

如果一个工夫距离里没有采集的数据,TDengine 还提供插值计算的性能。

写在最初

时序数据的查问场景多种多样,从用户需要登程,TDengine 进行了一系列查问性能的设计和优化。本文具体介绍了 TDengine 中的几种简单查问性能,如果大家在实操中遇到问题,能够将本文当做执行手册进行查阅,对于还无奈解决的问题,还能够加小 T 微信,进入 TDengine 技术社区深刻交换。


想理解更多 TDengine Database 的具体细节,欢送大家在 GitHub 上查看相干源代码。

正文完
 0