# 场景或需求 - 选择年:展示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理解成频率,每隔多长时间实时计算一次。 ![](./imgs/sliding.png) # 问题 现在目标是,把实时数据通过连续查询保存到另外创建的表。 - 怎么对超级表/子表进行连续查询? - 怎么把连续查询的数据放入新的超级表/子表? # 复习关于超级表和子表的常规操作 ``` 创建数据库: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 using liqun_nuode_1_1.superrealtj tags ('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 liqun_nuode_1_1.superreal where mac='187ED5316058' and addr='1' INTERVAL(1M) (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) ```