IoTDB:从时序数据查询到时序数据处理
select s1 fromroot.sg.device1
原始数据查询 时间范围、值过滤
where time > ? and s1>?
时间维度聚合
group by ([?, ?, 1m])
降采样:按需获取多粒度级别数据 时频变换:多维深度分析 序列分割:语义分析
子序列匹配:历史分析
深度挖掘时序数据的内涵价值
数据质量是头等大事
摘要表[2]
min:1
max:4
count:4
min:5
max:8
count:4
min:9
max:10
count:2
摘要
快速构建
灵活聚合
高效查询
时间分区树[3]
FlatFIT [1]
滑动窗口聚合
多级索引
一级索引
快速构建
高效查询
任意窗口
8.
IoTDB:从规则负载到复杂负载
复杂负载
规则负载
设备ID 时间 测点1测点2 … 测点1000
设备测点少,一张表建模
采集频率低
表202001
表202003
…
采样规则简单
时间 测点1 测点2 测点3
t1 v v v
t2 v v v
…
tn v v v
各测点独立采集,时间不齐
单设备数万测点
超高频采样频率
!乱序写入!
建模接口
• 设备超多,采集模式相同
ü CREATETEMPLATE (未正式发布)
• 多测点同时采集
ü aligned timeseries (多元时间序列) (未正式发布)
• 直接使用INSERT
ü 自动推断数据类型,采用默认压缩方式
ü 更精确控制,使用CREATE TIMESERIES
虚警过滤方案
n 1. 跳变清除:删除速度、加速度异常单点
pksigma
n 2. 阈值过滤:查找低于阈值的疑似子序列(一分钟长度)
p range
n 3. 匹配真警:疑似子序列匹配真实报警库(历史观测到的真实报警子序列)
p pattern_match
n 4. 异常过滤:疑似子序列LOF异常度计算(历史出现过的类似低电压子序列不属于异常)
p lof
n 5. 异常报警:返回异常度最高的疑似子序列(供人工确认,如属实,则加入报警库)
p max_value
github.com/thulab/iotdb-quality
运输分趟
n 问题:
p 利用运输轨迹信息
p计算装载运输趟数
n 挑战:
p 装卸区域个数、大小、
距离、位置动态变化,
算法参数需要不断调整
p 弯道停车误认为装卸区域
n 思路:计算轨迹折叠相似度
p 装卸区域:一进一出,轨迹折叠相似度高
p 排除弯道:一进一出,轨迹折叠相似度低
n 效果:准确率0.84
9.2 9.3 9.4 9.5 9.6
两装两卸 一装两卸
github.com/thulab/iotdb-quality
49.
对称子段挖掘方案
n 匹配时间序列s中所有长度为w的对称子段
n selectpattern_symmetric(s, window=w, threshold=t) from root.test.d1
p 输出:时间序列s中长度为w且对称度阈值小于等于t的所有子序列
github.com/thulab/iotdb-quality
3.(时间间隔的)K-sigma
n 输出时间间隔序列中大于1 +34的子序列
n 函数名:KSigma
p 输入:单个时间间隔序列%
p 参数:3
p 输出:时间间隔序列中大于1 + 34的子序列
SELECT KSigma(s, ’k’=’1’) FROM
root.time_diff
关机点对应的时间戳 关机时长
由于最后一个点没有后续点
无法计算时间间隔,因此我
们设定其时间间隔为
MAX_INF
github.com/thulab/iotdb-quality
5.(时间间隔的)绝对中位差
n 计算时间间隔序列的绝对中位差,567 8= 5$(+:)(|8" − 5$(+:)(8)|)
n 函数名:MAD
p 输入:单个时间间隔序列%
p 输出:时间间隔序列的绝对中位差
+,- = 0
SELECT MAD(s) FROM root.time_diff
github.com/thulab/iotdb-quality
时间戳等间隔修复
n 问题:时间序列中的数据存在非等间隔分布的情况,需要通过最小代价修复成等间隔
n 步骤:
n1. 获取时间间隔序列
n 2. 获取标准时间间隔(中位数、众数、聚类中心)
n 3. 计算最优修复
计算所有时间间隔
TIME_DIFFERENCE
计算标准时间间隔
Median/Mode/Cluster
计算起始时间点
计算最优修复
Timestamp_repair
github.com/thulab/iotdb-quality
60.
1. 时间间隔序列
n 计算给定时序数据对应的时间间隔序列
n函数名:Time_Difference
p 输入:单个时间序列%
p 输出:相邻两点的时间间隔序列t+,$_(+..(%)
采样间隔
为1s
采样间隔为24s
SELECT
Time_Difference(s1)
FROM root.demo
github.com/thulab/iotdb-quality
61.
2. 计算时间序列的时间间隔中位数
n 输入:单个时间序列
n输出:时间间隔序列的中位数(以秒为规整单位)
n 使用场景:大部分情况,都可以直接作为标准间隔来使用
Select
median(time_difference)
from root.test.d1 1000
github.com/thulab/iotdb-quality
62.
3. 计算时间序列的时间间隔众数
n 输入:单个时间序列
n输出:时间间隔序列的众数(以秒为规整单位)
n 使用场景:当时间间隔都较为规整,且分散较为集中的情况下,可以作为标准间隔来使用
Select mode
(time_difference) from
root.test.d1 1000
github.com/thulab/iotdb-quality
63.
4. 计算时间序列的时间间隔聚类中心
n 输入:单个时间序列
n输出:时间间隔序列的聚类中心(以秒为规整单位)
n 使用场景:相比前两个计算方式,适合于计算采集间隔扰动明显不规整的数据集,作为标准间隔
来使用
Select Cluster
(time_difference) from
root.test.d1 7000
github.com/thulab/iotdb-quality
64.
5.时间戳的等间隔修复方案
n 采用最小代价对单个时间序列进行等间隔修复后输出
p 函数名:timestamp_repair
p 输入序列:单个时间序列s
p 参数:标准采集间隔T,起始时间戳的获取方法start_method
p 输出序列:返回修复成等间隔的时间序列s’
Select
timestamp_repair(s1, ”T”=7000,
”start_method”=“mode”) from
root.test.d1
根据前面计算的
Median/Mode/Cluster
得到的阈值
github.com/thulab/iotdb-quality