一种数据清洗方案的设计
一种数据清洗方案的设计
吕小红 1+
1(重庆市电力公司检修分公司,重庆市 400039)
摘要:数据是企业信息化建设的生命线,―三分技术,七
分管理,十二分数据‖。数据清洗是提高数据集成数据质
前是一件非常困难的事情。好的脏数据处理方
案,可以起到事半功倍的效果。
量的一个重要手段。为有效保障应用集中、信息共享和
本文设计了脏数据的处理方案,目的就是提
消除―信息孤岛‖,本文从信息化标准体系入手,设计了一
高脏数据的处理效率和统一脏数据处理模式。
种数据清洗方案,将数据转换和数据清洗两者结合起来,
强化清洗过程的描述能力,对数据中心的脏数据进行处
理,从而提高脏数据的处理效率和统一脏数据处理模式,
关键定义
并整体提升企业信息化建设的水平。
关键词:脏数据 数据清洗 数据中心 重庆电力
引言
―十一五‖以来,重庆电力信息化坚持以业务
需求为导向,以建设 ERP 系统平台为主线,以业
务管理信息化为重点,以标准化建设为原则,快
速推进 SG186 工程建设。信息化工作在信息网络
基础设施建设、集中式信息系统开发、信息安全
体系架构和信息化管理等方面全面提高。
重庆电力依托企业门户和数据中心的搭建,
实现了跨业务的数据集成,资源配置趋于合理,
信息―孤岛‖现象逐步减少。通过 ERP、生产管理、
调度自动化、营销管理、电力市场交易运营、安
全监督管理、协同办公、应急指挥、农电业务应
用、招投标管理、数字档案馆、国际合作、纪检
监察、审计、法律事务等系统的建设,统一管理
模式的业务平台基本建成。
但是,各业务信息系统缺乏统一的数据标准
规范。企业的资源管理出现了信息交叠和信息资
源浪费等问题。在系统信息兼容性,数据一致性
方面需整合,重复录入、重复报表的现象仍然存
在,给基层单位增加了不必要的工作负担。数据
作为企业重要资源亟需提升其利用价值[1]。数据
中心的数据在抽取过程中难免产生脏数据,如果
不处理脏数据,则会影响数据的完整性、有效性。
如果采用手工方式处理脏数据,在大量的数据面
数据中心是指企业的业务系统与数据资源
进行集中、集成、共享、分析的场地、工具、流
程等的有机组合:数据仓库及其分析应用是数据
中心的一个主要应用;数据中心包括了操作型数
据和分析型数据以及数据与数据的集成/整合流
程;数据中心提供所有应用系统(包括集中的业
务应用系统、业务应用系统数据库、数据交换平
台、应用集成平台、数据仓库)的运营场所;数
据中心也是容纳用以支持应用系统运行的基础
设施(包括服务器、网络、存储设备)的物理地
点[2]。
狭义的数据中心是指数据仓库和建立在数
据仓库之上的决策分析应用,具体包括:数据源
分 析 , 数 据 的 ETL(Extraction Transformation
Loading),ODS(Operational Data Store)数据库,
数据仓库,数据集市,分析应用和元数据管理等。
脏数据是指源系统中的数据不在给定的范
围内或对于实际业务毫无意义,或是数据格式非
法,以及在源系统中存在不规范的编码和含糊的
业务逻辑的数据[3]。在本文中脏数据特指源业务
系统不规范编码的数据。
脏数据处理方案
数据中心是为电网生产、建设、企业经营、
综合管理等提供服务的统一信息平台,是各业务
应用系统的数据共享平台,是企业级综合分析与
辅助决策的支撑平台。
业务系统是数据中心的―供应商‖;业务系统
1761
重庆市电机工程学会 2012 年学术会议论文
的建设单位是数据中心的―生产商‖;数据中心是
业务系统的提升和补充, 并非取代;数据中心
是业务系统数据的有机融合,并非简单堆积。
级应用;业务系统支撑数据中心,数据中心规范
业务系统,两者相互作用,构成统一的、完整的
电力信息系统。数据的层次关系如图 1 所示。
业务系统侧重专业应用,数据中心强调主题
分析,两者相辅相成,构造企业级综合分析和高
图1 数据层次
本文侧重于 ETL 过程中产生的脏数据处理。
数据清洗的过程是从大量原始数据中使用一系
列逻辑判断,检查数据是否是符合数据仓库的数
据,从而选择做进一步保留或过滤的动作[4]。文
献[5]指出,目前数据清洗的主要问题是:对数据
的检查和修复的动作或者使用硬编码,或者只是
由人工来判断。在使用硬编码的方式下,需要清
洗的数据定义不发生变化,而一旦变化则需要重
新修改清洗部分的代码,重新编译,导致系统的
可扩展性和灵活性较差,而且硬编码的清洗过程
描述性较弱,难以应对复杂逻辑的数据清洗;在
使用人工判断的情形下,只能处理较小的数据
量,不仅增加了人们的工作量,而且质量和准确
性较差,对于大规模的数据清洗则无能为力。
脏数据处理步骤
脏数据处理整体的步骤为:
数据抽取时产生脏数据,插入脏数据处理表
中。
在 WEB 界面中对产生的脏数据进行处理,
分别针对脏数据和非脏数据进行处理。
针对已经处理的脏数据进行重抽,并删除已
处理的脏数据。
1762
图 2 脏数据处理流程
数据抽取
在数据抽取过程中所有的代码转换都通过代
码转换表(CODEMAPPING)进行转换。当在代
码转换表中找不到该代码时,该条数据即为脏数
据。当确定数据为脏数据时需要将该信息记录在
脏数据表(TB_SYS_ETL_DIRTYDATA)中。
如图表 3 2 所示 ETL 抽取时脏数据处理流
程:
1、判断是否为脏数据,即在代码转换表中找
不到新代码。
2、判断该记录在脏数据表中是否存在。判断
条件为代码种类 ID、业务系统 ID、源表名、
展示层数据分析应用层数据集市层数据仓库层数据源层ETL(ODS)(ODS)数据仓库数据仓库数据获取层 安全生产数据集市 电网设备数据集市 电网运行数据集市 用电客户数据集市 电量电费数据集市 财务绩效数据集市 。。。。数据集市安全生产分析电网运行分析电网设备分析用电客户分析财务绩效分析电量电费分析。。。。分析业务应用数据的获取/抽取/清洗/整合/分析/展现应用展示层数据分析应用层数据集市层数据仓库层数据源层ETL(ODS)(ODS)数据仓库数据仓库数据获取层 安全生产数据集市 电网设备数据集市 电网运行数据集市 用电客户数据集市 电量电费数据集市 财务绩效数据集市 。。。。数据集市安全生产分析电网运行分析电网设备分析用电客户分析财务绩效分析电量电费分析。。。。分析业务应用展示层数据分析应用层数据集市层数据仓库层数据源层ETLETL(ODS)(ODS)数据仓库数据仓库数据获取层 安全生产数据集市 电网设备数据集市 电网运行数据集市 用电客户数据集市 电量电费数据集市 财务绩效数据集市 。。。。数据集市安全生产分析电网运行分析电网设备分析用电客户分析财务绩效分析电量电费分析。。。。分析安全生产分析电网运行分析电网设备分析用电客户分析财务绩效分析电量电费分析。。。。分析业务应用数据的获取/抽取/清洗/整合/分析/展现应用数据的获取/抽取/清洗/整合/分析/展现应用开始数据抽取WEB界面中脏数据处理脏数据重抽结束脏数据记录基础编码编码映射表ETL参数文件删除已处理脏数据输出输入修改输入判定删除
一种数据清洗方案的设计
源字段名,源 ID 全部相等。如果存在跳到第 4
步。
3 、 将 脏 数 据 插 入 到 脏 数 据 表
(TB_SYS_ETL_DIRTYDATA)中。数据插入后
直接到第 6 步。
4、新脏数据的时间戳的值与旧脏数据时间
戳的值进行比较。如果大于则直接跳到第 6 步。
5、更新新时间戳的值到脏数据表中。
6、脏数据处理结束。
数据重抽
ETL 脏数据重抽流程:
1 、 将 脏 数 据 参 数 文 件 视 图
( VI_SYS_DIRTY_DATA_PARA ) 生 成 参 数 文
件。按行号的顺序,生成到参数文件中,将列 1,
列 2 的内容通过行列转换的方式输出到文本文
件中。
2、通过参数文件中的$$TABLES 变量得到
是否有新的已处理脏数据。如果$$TABLES 中有
内容则有脏数据,如果为空,则没有需要处理的
脏数据。当没有已处理脏数据时跳回第 1 步。有
脏数据则进入第 3 步。
3 、 利 用 第 一 步 所 生 成 的 参 数 文 件 中 的
$$WHERECOONDITION 变量对相应的脏数据
源业务表进行重抽。在抽取过程中删除相应的脏
数据记录。
图 3 ETL抽取脏数据处理流程
WEB 界面脏数据处理
脏数据通过 WEB 界面展现出,由脏数据管理人
员进行处理决定。分为两种情况:第一种是脏数
据 确 实 为 脏 数 据 , 则 维 护 该 数 据 抽 取 相 关
MAPPING 的参数文件,将该脏数据排除。另一
种为该代码为有效代码,此时需要在 ODS 库中
相应的编码表中新建一个编码,并在代码映射表
中插入相应的记录。
数据表的设计
图 4 ETL脏数据重抽流程
字段名称
字段
代码种类 ID
TYPEID
代码映射表(CODEMAPPING)
数据类型
备注
VARCHAR2(3)
来自代码种类表 CODETYPE
业务系统 ID
SYSTEMID
VARCHAR2(3)
来 自 代 码 表
源表名
源字段名
SOURCETABENAME
VARCHAR2(30)
原有业务系统源数据表
SOURCEFIELDNAME
VARCHAR2(50)
原有业务系统源字段
源代码表名
SOURCECODETABLENAME
VARCHAR2(50)
原有业务系统对应的源代码
CODECONTENT
表
1763
开始是否为脏数据脏数据是否已经存在插入脏数据新时间戳小于旧时间戳更新时间戳结束是否是否是否开始脏数据参数文件视图查询脏数据参数文件存在已处理有脏数据ETL session 表相应session重抽结束输入生成输入不存在存在输入
重庆市电机工程学会 2012 年学术会议论文
源 ID
SOURCEID
VARCHAR2(80)
原有业务系统源字段的代码
ID值
源名称
SOURCENAME
VARCHAR2(80)
原有业务系统源字段对应的
目标 ID
目标名称
备注
DESTINATIONID
VARCHAR2(36)
转换后的代码 ID 值
DESTINATIONNAME
VARCHAR2(80)
转换后的代码名称
REMARK
VARCHAR2(255)
一些代码说明
代码名称
字段名称
字段
代码种类 ID
TYPEID
ETL脏数据表(TB_SYS_ETL_DIRTYDATA)
数据类型
备注
VARCHAR2(3)
来自代码种类表 CODETYPE
业务系统 ID
SYSTEMID
VARCHAR2(3)
来 自 代 码 表
源表名
源字段名
SOURCETABENAME
VARCHAR2(30)
原有业务系统源数据表
SOURCEFIELDNAME
VARCHAR2(50)
原有业务系统源字段
源代码表名
SOURCECODETABLENAME
VARCHAR2(50)
原有业务系统对应的源代码
CODECONTENT
表
源 ID
SOURCEID
VARCHAR2(80)
原有业务系统源字段的代码
ID值
源名称
SOURCENAME
VARCHAR2(80)
原有业务系统源字段对应的
ETL 时间
处理标志
ETLDATE
DONE_FLAG
DATE
CHAR(1)
代码名称
ETL 时间
0:未处理,1:有效数据,
已处理,2:脏数据,已处理。
主键名称
MAIN_KEY
VARCHAR2(60)
原业务系统中主要用于限制
数据范围的字段名,一般为
时间型主键
主键值
主键类型
备注
KEY_VALUE
KEY_TYPE
REMARK
VARCHAR2(20)
原业务系统的主键字段的值
CHAR(1)
0:日期,1:字符,2:数值
VARCHAR2(255)
说明
字段名称
字段
数据类型
备注
ETL session 表(TB_SYS_ETL_SESS)
表名
用途
TB_NAME
PURPOSE
VARCHAR2(100)
原有业务系统源数据表
CHAR(1)
Session 的用途:0:全量,1:
增量,2:脏数据重抽,3:
其他
SESSION 名称
SESS_NAME
VARCHAR2(100)
SESSION 名称
目录名
FLDR_NAME
VARCHAR2(100)
Session 所在目录
工作流名称
WFL_NAME
VARCHAR2(100)
调用 SESSION 的工作流名称
维护人员
维护时间
备注
OPRTR
OPRT_TIME
REMARK
VARCHAR2(20)
记录信息的维护人员
DATE
记录信息的维护时间
VARCHAR2(255)
对维护进行说明
1764
一种数据清洗方案的设计
字段名称
字段
数据类型
备注
脏数据参数文件(VI_SYS_DIRTY_DATA_PARA)
行号
ROW_NUM
VARCHAR2(100)
用于参数文件内容排序,按
参数标题
COL1
参数内容
COL2
COLB
COLB
行号从小到大的输出到文件
中
各 WorkFlow 或者 session 参
数的标题行
各变量的名称及内容
此表的用途在于当有脏数据产生时,该视图
将有记录,可以生成脏数据所对应的参数文件。
该参数文件可用于脏数据重抽。
入公司发展战略、管理体系和日常经营活动的主
要目标。
结束语
本文构想了一种脏数据的处理方案,目的是
提高脏数据的处理效率和统一脏数据处理模式。
这种方案将有助于建立统一数据模型,实现企业
信息资源的全面共享和管理价值的增值,实现公
司信息管理从分散管理到集中管理的转变;实现
主要信息系统实用化、基础数据及时准确、业务
流程完整顺畅、系统操作常态实用,信息系统成
为纵向贯通和横向集成的业务管理平台,有效融
参考文献
[1] 福建省电力公司数据中心的建设文档
[2] 天津市电力公司数据中心的建设文档
[3] 重庆市电力公司数据中心的建设文档
[4] 李俊奎,王元珍,李专,一种基于规则的数据清洗方
案[J],计算机工程,2007,32.
[5] Rahm E, Do Honghai. Data cleaning: problems and
current approaches[J[,Data Enginneering. 2000, 23(4)
1765