鼎鼎知识库
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

TDengine连续查询统计数据.md 7.0KB

场景或需求

  • 选择年:展示12个月的数据 → 按月统计
  • 选择年、月:展示这个月所有天的数据 → 按天统计
  • 选择年、月、天:展示24小时的数据 → 按小时统计
  • 选择年、月、天、小时:展示60分钟的数据 → 按分钟统计
  • 选择当天: 展示24小时的数据 → 按小时统计
  • 选择当周: 展示本周7天的数据 → 按天统计
  • 选择当月:展示这个月所有天的数据 → 按天统计
  • 选择当年:展示12个月的数据 → 按月统计

现在时序数据库的表包含:real,warning,dl,kg,由于这些表每隔几秒存入数据,如果想获得按小时、按天、按月、按年的数据库,不可能直接从这些表中实时计算而获得,而是让时序数据库自动按小时、按天、按月、按年统计数据,比如形成realtj,warningtj,dltj,kgtj类似的统计表,然后从这些统计表中获取数据。

怎么实现

TDegnine提供了一种高级功能叫Continus Query连续查询,通过滑动窗口来统计数据。什么叫滑动窗口

滑动窗口大致有一个interval属性和forward sliding times. interval理解成时间间隔或者步长,就是每次统计多长时间段内的数据。forward sliding times理解成频率,每隔多长时间实时计算一次。

问题

现在目标是,把实时数据通过连续查询保存到另外创建的表。

  • 怎么对超级表/子表进行连续查询?
  • 怎么把连续查询的数据放入新的超级表/子表?

复习关于超级表和子表的常规操作

创建数据库:create database liqun_nuode_1_1
删除数据库:drop database liqun_nuiode_1_1
查看所有数据库: show databases
创建超级表:create table liqun_nuode_1_1.superreal (ts timestamp,...) tags (mac binary(20))
创建子表:create table liqun_nuode_1_1.real using liqun_nuode_1_1.superreal tags ('187ED5316058','1')
子表插入数据:insert into liqun_nuode_1_1.real using liqun_nuode_1_1.superreal tags ('187ED5316058') values ()()
查找某个子表: select * from liqun_nuode_1_1.real where mac=`187ED5316058`

连续查询语句尝试

实时数据

1、创建关于统计的超级表:create table liqun_nuode_1_1.superrealtj (ts timestamp, aal float, aam float, aah float, avl float, avm float, avh float, awl float, awm float, awh float, atl float, atm float, ath float, aldl float, aldm float, aldh float, bal float, bam float, bah float, bvl float, bvm float, bvh float, bwl float, bwm float, bwh float, btl float, btm float, bth float, bldl float, bldm float, bldh float, cal float, cam float, cah float, cvl float, cvm float, cvh float, cwl float, cwm float, cwh float, ctl float, ctm float, cth float, cldl float, cldm float, cldh float, nal float, nam float, nah float, ntl float, ntm float, nth float, nldl float, nldm float, nldh float) tags (mac binary(20), addr binary(5))



2、定义把实时查询数据放入统计子表,并创建子表:create table liqun_nuode_1_1.realtj_187ED5316058_1  as select MIN(aa), AVG(aa), MAX(aa), MIN(av), AVG(av), MAX(av), MIN(aw), AVG(aw), MAX(aw), MIN(at), AVG(at), MAX(at), MIN(ald), AVG(ald), MAX(ald), MIN(ba), AVG(ba), MAX(ba), MIN(bv), AVG(bv), MAX(bv), MIN(bw), AVG(bw), MAX(bw), MIN(bt), AVG(bt), MAX(bt), MIN(bld), AVG(bld), MAX(bld), MIN(ca), AVG(ca), MAX(ca), MIN(cv), AVG(cv), MAX(cv), MIN(cw), AVG(cw), MAX(cw), MIN(ct), AVG(ct), MAX(ct), MIN(cld), AVG(cld), MAX(cld), MIN(na), AVG(na), MAX(na), MIN(nt), AVG(nt), MAX(nt), MIN(nld), AVG(nld), MAX(nld) from real_187ed5316058 where addr='1' INTERVAL(1M)

以上方式可以创建表和流都成功。但是,一旦超过300条流就会报错。

(a表示毫秒,s表示秒,m表示分钟,h表示小时,d表示天,w表示周,n表示月,y表示年)

3、查看:show streams
4、删除:kill stream

5、查询:select * from liqun_nuode_1_1.superrealtj where '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND mac='187ED5316058' AND adrr='1'

报警统计

1、定义报警统计的超级表:create table liqun_nuode_1_1.superwarningtj (ts timestamp, typesl int, levelsl int) tags (mac binary(20), addr binary(5), type int, level int)

2、报警统计实时查询定义,并保存到子表
create table liqun_nuode_1_1.warningtj using liqun_nuode_1_1.superwarningtj tags ('187ED5316058','1',1,1) as select SUM(type), SUM(level) from liqun_nuode_1_1.superwarningtj where mac='187ED5316058' and addr='1' and type=1 and level=1 INTERVAL(1M)

开关统计

1、定义开关统计的超级表:
create table liqun_nuode_1_1.superkgtj  (ts timestamp, sl int) tags (mac binary(20), addr binary(5), oc bool)

2、开关统计实时查询定义,并保存到子表
create table liqun_nuode_1_1.kgtj using liqun_nuode_1_1.superkgtj tags ('187ED5316058','1',true) as select from liqun_nuode_1_1.superkgtj where  mac='187ED5316058' and addr='1' and oc=true INTERVAL(1M)

不使用流后的尝试

在服务端每一分钟、一小时、一天、一月、一年自动执行背景程序,统计上一分钟、上一小时、上一天、上一年的数据。

实时数据

实时数据超级表:create table liqun_nuode_1_1.superreal (ts timestamp,...) tags (mac binary(2), addr(5))

实时数据子表创建:create table liqun_nuode_1_1.real_187ed5316050_1 using liqun_nuode_1_1.superreal tags ('187ed5316050','1')

实时数据子表数据插入:insert into liqun_nuode_1_1.real_187ed5316050_1 using liqun_nuode_1_1.superreal tags ('187ED5316058','1') values ()()

实时数据子表查询:select * from liqun_nuode_1_1.real_187ed5316050_1  where ts >= '2018-01-01 00:00:00.000' and ts <= '2018-01-01 00:00:00.000' and mac='' and addr=''

实时统计数据超级表:create table liqun_nuode_1_1.superrealtj (ts timestamp, aal, aam, aah...) tags (mac binary(2), addr(5), ttype(5))

实时统计数据子表:create table liqun_nuoe_1_1.realtj using liqun_nuode_1_1.suerrealtj tags ('187ed5316050','1','')

实时统计数据子表数据插入:insert into liqun_nuode_1_1.realtj_187ed5316050_1 using liqun_nuode_1_1.superrealtj tags ('187ED5316058','1','m') values()()

报警数据

报警超级表:create table liqun_nuode_1_1.superwaring (ts timestamp, type binary(5), sore bool, level binary(5)) tags (mac binary(2), addr(5))

报警子表:create table liqun_nuode_1_1.warning using liqun_nuode_1_1.superwarning tags ('187ed5316050','1')

报警子表插入:insert into liqun_nuode_1_1.warning using liqun_nuode_1_1.superwarning tags ('187ed5316050','1') values()()

报警统计超级表:create table liqun_nuode_1_1.superwarningtjbj (ts timestamp, bjsl bianry(80), levelsl binary(80) ) tags (mac binary(2), addr binary(5))



报警统计子表:create table liqun_nuode_1_1.warningtjbj_187ed5316058_1_0 using liqun_nuode_1_1.superwarningtjbj tags ('187ed5316050','1',)


报警统计子表插入:

开关数据

开关超级表:

开关子表:

开关子表插入:

开关统计超级表:

开关统计子表:

开关统计子表插入: