Apache IoTDB (Internet of Things Database) 是一个时序数据的数据管理系统,可以为用户提供数据收集、存储和分析等特定的服务。IoTDB-Quality基于IoTDB用户自定义函数(UDF),实现了一系列关于数据质量的函数,包括数据画像、数据质量评估与修复等,有效满足了工业领域对数据质量的需求。
目前,IoTDB-Quality的1.0.0版本已经正式发布,欢迎大家点击阅读原文下载使用。
时序数据的数据质量
对时序数据而言,数据质量至关重要。比如,如果我们的数据分析基于低质量的时间序列,分析得到的结果就有可能存在问题,进一步地可能影响我们做出的决策。因此,我们需要有一套对时间序列的数据质量进行评估的机制,事先识别出低质量的时间序列,避免对后续的数据分析等产生不利影响。
我们整理了常见的数据异常,并将它们归结为下面四个数据质量指标:
完整性Completeness | 一致性Consistency | 时效性Timeliness | 有效性Validity |
---|---|---|---|
数据丢失异常 | 数据过密异常 | 数据延迟异常 | 取值范围异常 |
空值异常 | 数据重复异常 | 取值变化范围异常 | |
特殊值异常 | 速度范围异常 | ||
时间戳丢失异常 | 速度变化范围异常 |
IoTDB的数据质量分析
根据IoTDB的特性,我们发现,IoTDB中的时序数据不可能发生时间戳丢失异常和数据重复异常。下面,我们将以完整性为例具体介绍我们的数据质量指标:
我们曾对某公司的工程车辆运行数据进行了数据质量分析,下面是某台车辆的速度序列的一部分:
仅从上面的折线图中,利用肉眼对数据的完整性进行评判是一件不可能完成的任务。但我们可以使用Completeness函数对这段数据进行完整性分析。
select completeness(s1,'window'='2000') from root.test.d3 where time >= 2020-11-01 04:48:00
上面的SQL语句的意思是,我们取出root.test.d3.s1这个时间序列,从2020-11-01 04:48:00这个时刻开始,将序列按照每个窗口2000个数据点的标准划分为若干个窗口,并计算每一个窗口的完整性。
SQL语句的输出如上图所示,我们发现序列的完整性基本维持在0.6左右,是一个较低的水平。为了更加直观地体现完整性的意义,我们在下面展示了原始速度序列的一个片段,可以发现,数据中存在大量的缺失点,数据丢失异常非常严重。
结合车辆的工作时间记录,我们推测出这台车辆的速度传感器可能存在运行不稳定的问题,导致数据频繁丢失。
类似地,我们对一系列工程车辆都进行了数据质量评估和分析,向该公司提供了数据质量报告,为公司利用信息化手段发现和解决问题提供了重要技术支持。