首页 > 其他分享 >TDengine的降采样查询+跨时区统计

TDengine的降采样查询+跨时区统计

时间:2023-09-19 14:36:54浏览次数:39  
标签:采样 interval TDengine INTERVAL 跨时区 时间 时区 服务端

如果采集表中每5秒采集一个数据,但查询时不想要这么多,只想要1分钟一个数据,这时面要用到降采样查询,如下面 interval(60s)表示60s一个数据,期间的数据要以取平均,最大,最小等

select _wstart, _wend, avg( current), min(current), max(current) from test.d100 where ts between '2017-07-14 10:40:01.000' and '2017-07-14 10:40:02.000' interval(1s);

//s秒,d天,m月,y年,w周

 

 

一文帮你掌握TDengine的降采样查询+跨时区统计 - 涛思数据TDengine - 博客园 (cnblogs.com)

作者:陈玉|涛思数据

小T导读:作为一款高性能的时序数据库,TDengine提供了强大的数据分析功能。在TDengine官网的第一个章节里,有这样的描述:“无论是十年前还是一秒钟前的数据,指定时间范围即可查询。数据可在时间轴上或多个设备上进行聚合。”

今天,我们的主角就是上文中“可在时间轴上”聚合的强大函数——INTERVAL。

INTERVAL是TDengine一大重要功能,可以帮助我们实现降低数据采集频率的功能——也就是降采样。举个简单的例子:假设我们有某个设备一年的数据,时间数据的频率是1天,那么就是一共365条数据。现在,如果我们想按照‘月’这个频率统计,那么数据量就变成了12条。

根据官网的语法描述,相关的功能模块有三个:

  1. INTERVAL本身
  2. SLIDING
  3. INTERVAL OFFSET

对于以处理时序数据为根基的时序数据库来说,如何灵活的利用时间频率来计算分析数据实在是太重要了。下面我们围绕上面三个功能模块,分别举一个简单的应用场景的例子并做出具体说明:

1. INTERVAL:查询温度传感器t1记录的温度、压力每五分钟的平均值

select avg(t), avg(p) from t1 interval(5m);

这是一个最简单的使用情况,INTERVAL负责指定时间范围窗口,由AVG这种聚合函数来计算这个时间范围内的平均值。也可以换成MAX/MIN这类的选择函数,来统计出这个时间范围内的最大值/最小值。(在TAOS SQL中,聚合函数指的是COUNT/AVG/TWA/SUM等用于从数据集中汇合再计算的函数,选择函数是指 MIN/MAX/FIRST/LAST/LAST_ROW等用于从数据集中筛选结果的函数。)

INTERVAL本质上就是group by的时间版本,所以一定需要配合上述聚合或选择函数来使用。INTERVAL后面的时间单位可以是 a(毫秒)、s(秒)、m(分)、h(小时)、d(自然日)、w(周), n(自然月) 和 y(自然年)。(暂时还不支持自然周,interval(1w) 目前等效于interval(7d))。

2. SLIDING:可以统计类似股票市场的均线

select avg(t) from stockmarket interval(5d) sliding(1d)。

上述语句的实际含义是统计股市上某股票所有每过一天的5天的价格平均值,把这些值连起来,就是大家熟知的五日均线了。

在上述计算过程中,SLIDING起到了非常关键的作用。我们已经知道,INTERVAL 的值负责指定每次执行查询的时间窗口。SLIDING则代表着指定窗口向前滑动的时间。如下图所示:

t0s,t1s,t2s分别是三个时间窗口的起点,t0e,t1e,t2e分别是三个时间窗口的终点。当我们在查询中不指定SLIDING的值时,它默认等于INTERVAL VALUE。也即是说在第一个例子当中的select avg(t), avg(p) from t1 interval(5m)等效于select avg(t), avg(p) from t1 interval(5m) sliding (5m);

3. INTERVAL OFFSET:统计某个设备在其他时区(向西相差三个时区)的一个月的总数据量

select sum(t) from t1 interval(1n,3h) ;

这个SQL的语义是:统计当前服务端所在时区向西推动三个时区后的这个设备的该月总数据。OFFSET 3h代表的是OFFSET值为3h,也就是说这个SQL适用于统计不同时区的自然月数据统计。

INTERVAL OFFSET会相对复杂一些。想了解的话,需要先更多地了解INTERVAL和时区的关系。

如果INTERVAL的值是自然日(d),自然月(n),自然年(y),那么它就是对齐TDengine服务端所在时区的0点开始做的窗口切分,如下图所示:不论当前所属哪个时区,所有时间戳列的起始时间都是0点。

但是,如果是以时分秒及以下的时间单位去切分窗口,那么INTERVAL的值则是对齐从UTC-0时间的00:00:00.000开始切分的时间窗口。

如下图所示,时间戳列的起始时间都是8点,这是因为TDengine客户端的时区为UTC-8,标准时间为0点的时候,东八区为8点(注意:在POSIX标准中,UTC-8代表东八区,与平时的习惯性表达不一样)。

这个场景,就是官网文档中这段话的含义:

TDengine 中时间戳的时区总是由客户端进行处理,与服务端无关。具体来说,客户端会对 SQL 语句中的时间戳进行时区转换,转为 UTC-0时区的Unix时间戳再交由服务端进行写入和查询;在读取数据时,服务端也是采用 UTC-0时区提供的原始数据,客户端收到后再根据本地设置,把时间戳转换为本地系统所要求的时区进行显示。

总结一下就是:TDengine以时间戳形式来存储时间数据,时间戳本身是一个和时区无关的东西,但是由于TDengine要把数据查询出来展示给世界上不同地区的用户看,就和时区有关系了。在INTERVAL中,如果是自然日,自然月,自然年,均以TDengine服务端所在时区的0点为起始时间进行时间窗口区分。如果是以h(小时)及以下为单位切分窗口,那么进行窗口切分的起始时间就是UTC时区的0点。

不论是哪个时区的客户端,最终的计算列结果都是一致的,只是由于时区不同,所以显示的时候在时间戳列上会有一些偏差。因此我们强烈建议,非特殊情况下,客户端服务器和服务端服务器的时区要保持一致,从而使得两边的查询显示是一致的,从而减少不必要的误解。

比如,左侧客户端count(*)看起来应该是1 4 2,实际上却是4和3。这就是因为两边时区不一致导致的视觉差异。这时候就要以服务端的显示为准:6月30日有4条数据,7月1日有3条数据——TDengine服务端所在服务器的查询结果,永远是所见即所得的正确。

搞清楚了INTERVAL对于自然日月年和时分秒的不同切分逻辑后,接下来,我们终于可以说一下OFFSET了。

OFFSET其实是INTERVAL功能的偏移值。通过调整OFFSET值,就可以在时间轴上自由选择时间窗口的起始点。从而完成不同时区的数据分析统计。

比如,服务端当前的时区是东八区,但是我们想知道在东五区时区下,设备t1的每个月数据总量。就可以这样写:

select sum(t) from t1 interval(1n,3h) ;

但是由于OFFSET目前暂时不能支持负值,所以时间窗口的起点只能从时区东向西偏移。因此如果想用时区偏移功能统计24个时区,暂时可以把服务端所在的服务器时区设置为东十二区(UTC-12)。

作为一个定位国际化的产品,我们TDengine后面会继续完善相关的功能。如果想了解更多更具体的细节,可以在GitHub上查看相关源代码。

标签:采样,interval,TDengine,INTERVAL,跨时区,时间,时区,服务端
From: https://www.cnblogs.com/81/p/17714523.html

相关文章

  • 时间序列的重采样和pandas的resample方法介绍
    重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。在本文中,我们将深入研究Pandas中重新采样的关键问题。为什么重采样很重要?时间序列数据到达时通常带有......
  • 一文告诉你为什么时序场景下 TDengine 数据订阅比 Kafka 好
    在TDengine3.0中,我们对流式计算、数据订阅功能都进行了再升级,帮助用户极大简化了数据架构的复杂程度,降低整体运维成本。TDengine提供的类似消息队列产品的数据订阅、消费接口,本质上是为了帮助应用实时获取写入TDengine的数据,或者以事件到达顺序处理数据,与其他消息队列相比,它......
  • Windows下安装TDengine_tdengine windows安装
     ERRORfailedtoinitdnodesinceunsupportedplatform,https://www.taosdata.com/assets-download/3.0/TDengine-server-3.1.1.0-Windows-x64.exehttps://www.taosdata.com/assets-download/3.0/TDengine-client-3.1.1.0-Windows-x64.exe 【TDengine】1、Windows下安装TD......
  • ArcPy基于Excel采样点长时间数据执行IDW插值与自动掩膜
      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据......
  • 上采样的几种方式
    上采样:在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样。上采样的几种方法:插值:一、最近邻插值(NearestNe......
  • TDengine 3.1.1.0 来啦!更新如下
    自3.0版本发布以来,在研发人员和社区用户的不断努力下,TDengine 做了大量更新,产品稳定性和易用性也在不断提升。近日,TDengine3.1.1.0成功发布,本文将向大家简单介绍一下该版本涉及的重大更新。写在前面伴随2023年9月官网改版,TDengine正式升级为高性能、分布式的物联网、......
  • TDengine函数大全-时间和日期函数
    以下所有示例基于TDengine3.1.0.3TDengine函数大全1.数学函数2.字符串函数3.转换函数4.时间和日期函数5.聚合函数6.选择函数7.时序数据库特有函数8.系统函数时间和日期函数TDengine函数大全NOWTIMEDIFFTIMETRUNCATETIMEZONETODAYNOWNOW()功能说明:返回客户端当前系统时间。返回......
  • TDengine函数大全-目录
    TDengine函数大全详情见具体页面,点击进入。1.数学函数ABSACOSASINATANCEILCOSFLOORLOGPOWROUNDSINSQRTTAN2.字符串函数CHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMRTRIMSUBSTRUPPER3.转换函数CASTTO_ISO8601TO_UNIXTIMESTAMPTO_JSON4.时间和日期函数NOWTIMEDIFFTIMETRUNCATETIMEZ......
  • 时序数据库 TDengine 与创意信息兼容性互认,让你的数据共享方案更丰富
    新型物联网实现良好建设的第一要务就是打破信息孤岛,将数据汇聚在平台统一处理,实现数据共享,放大物联终端的行业价值,实现系统开放性,以此营造丰富的行业应用环境。在此背景下,物联感知平台应运而生,成为推动智慧城市建设,强化物联网感知设施跨行业、跨领域共享的重要支撑平台。近日,涛思......
  • 干音降噪——采样降噪与静音
    前面那一块就是噪音选中噪音部分,采样在效果里面添加降噪应用了之后,噪音就没有了......