首页 > 其他分享 >一文读懂 TDengine 的三种查询功能

一文读懂 TDengine 的三种查询功能

时间:2022-09-30 09:23:35浏览次数:179  
标签:10 38 一文 TDengine 03 查询 读懂 2018

小 T 导读:作为一款专业的时序数据库Time Series DatabaseTSDB),为满足用户在不同场景下的查询需求,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上查看相关源代码。

 

  

  

  

  

 

 

 

 

 

  

标签:10,38,一文,TDengine,03,查询,读懂,2018
From: https://www.cnblogs.com/taosdata/p/16743777.html

相关文章

  • 一文搞定 Spring事务
    Spring事务上文使用SpringJDBC1、JDBC事务控制​ 不管你现在使用的是那一种ORM开发框架,只要你的核心是JDBC,那么所有的事务处理都是围绕着JDBC开展的,而JDBC之中的事......
  • 通过一文简单了解自定义表单设计器
    什么是自定义表单设计器?大家对这个问题还是比较关注的。其实,自定义表单设计器是一款在线可视化表单建模工具,组件丰富、操作简单、灵活更方便,是很多现代化企业倾向于使用的......
  • 一文读懂企业级大数据项目开发与实施
    ​从0基础入门到大牛,对于小白来说,它不仅需要时间的磨炼,开发经验的积累,更需要有合适的机遇与平台。无论是在传统行业还是互联网行业,近年来大数据技术的应用和发展已经相当成......
  • 一文搞懂MySQL客户端/服务器运行架构
    前言之前对MySQL的认知只限于会写些SQL,本篇开始进行对MySQL进行深入的学习,记录和整理下自己对MySQL不熟悉的地方。如果有需要可以关注我的专栏一起学习,共同进步!关于mysql的......
  • 生成唯一文件名不同方法
    生成唯一文件名不同方法测试一privatevoidTestUnid(){Parallel.For(1,100,(i)=>{varfileName=DateTime.Now.ToString("yyyyMMddHHmmss");......
  • 一文掌握 云,kebernets基本概念
    云,kebernets基本概念:1.云容器引擎(CloudContainerEngine,简称CCE)2.集群(Cluster)集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等3.节点(Node)每一个节......
  • 一文搞懂Kafka,在项目里面更加得心应手的使用
    大家好,又见面了。Apachekafka是主流的消息中间件的一种,本文对kafka的相关概念、原理、使用关键注意事项等进行总结说明。1.kafka关键概念与术语1.1简单的例子说明kafk......
  • 一文详解深度学习中的Normalization:BN/LN/WN
    参考资料:https://mp.weixin.qq.com/s?__biz=MzU3NDgxMzI0Mw==&mid=2247504259&idx=3&sn=bcd5af6172a5dd77d29e9d5f15362078&chksm=fd2e34d7ca59bdc11ed2d8663916452293ab4......
  • 一文入门Qt Quick
    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16733091.html初识QtQuick很高兴可以来到这一章,终于可以开始......
  • 一文读透react精髓
    学和使用react有一年多了,最近想在梳理一下react基础知识,夯实基础,激流勇进~关于reacr-router,redux,redux-saga后续都会慢慢输出,希望各位看官老爷持续关注~~要是能给个赞......