1、概述
随着数据质量问题日益受到关注,为了降低和避免低劣的数据质量带来的影响和危害,通常在ETL(抽取、转换和加载)过程中增加了数据清洁的步骤,这样一来ETL就变成了ECTL(抽取、清洁、转换和加载),数据在被转换和加载到数据仓库之前,会被过滤、清洁和规则化,在很大程度上提高了数据仓库中的数据质量,但仅依靠ECTL对数据进行清洁是远远不够的。“脏数据”表现形式存在不确定性,“脏数据”之所以“脏”的原因有很多,例如:空值,字段值溢出,违反外键约束,重复记录,违反业务逻辑等。在最初设计ETL规则的时候,并不知晓哪个字段会有什么类型的脏数据,无法有针对性地在ETL过程中建立有效的数据清洁规则,而只能在ETL规则运行时遇到数据质量问题引发的错误后,才能去解决它。这样虽然在一定程度上提高了数据质量,但是这种“头疼医头,脚疼医脚”的方式永远是被动的,无法统筹和系统化地解决数据质量的问题。面对错综复杂的数据源系统,在进行数据处理和ETL规则的设计之前,可以通过数据剖析对数据有一个全面的,完整的认识。
数据剖析(DataProfiling,DP),通过对数据自身统计值分析来反映数据质量问题,是数据质量测评的常用方法。数据剖析可以检验数据的有效性、可用性。对于数据仓库类项目,数据剖析可以针对备选数据源来分析、获得其结构、内容、关系、继承关系。数据仓库大师Ralph Kimball博士对数据剖析是这样定义的——对数据源内容系统化的预先的分析。在做数据整合的时候,数据源系统能够提供什么质量等级的数据制约着下一步的ETL设计工作,全面了解系统中数据情况是提出合理完善的解决办法的前提。
2、数据剖析方法
数据剖析通常会包含如下几个内容:
1)列分析。
- 值域分析:主要分析字段的值是否满足指定阈值、分析字段值的统计量(最大值,最小值,中位数、均值、方差等)。BUG:最大最小值越界,NULL 值
- 基数分析:字段中不同值个数,适合维度类指标。BUG:基数的记录个数过多或过少。
- 类型分析:数据类型是否符合定义,常用于数据预览时对数据内容做评估。
- 数据分布:各个维度值在总体数据中分布情况。BUG:数据分布不符合预期,过分集中,有NULL值。
- 波动监测。BUG:大幅度波动。
- 异常值监测。BUG:存在异常值,如NULL、-1、0等。
2)交叉列分析。
- 功能相关性分析。字段或字段之间是否满足指定的业务规则。
3)表分析。
- 主键唯一性分析。BUG:不唯一,为NULL。
- 表基础分析。主要分析表的基础统计量,如分区、行数、大小,最好有对照表比对。
4)交叉表分析。
- 外键分析。事实表中的外键是否都能在维表中关联到。BUG:外键找不到;外键为NULL或异常值。
- 血缘分析。表和字段的从数据源到当前表的血缘路径,以及血缘字段之间存在的关系是否满足,关注的数据的一致性以及表设计的合理性。