Oracle数据表空项筛选技术探索
2019-08-27张磊
张磊
[摘 要]随着信息数据的爆炸式增长,数据质量成为提高企业数据资产价值的最核心因素,是数据治理领域的重要分支,是提高企业数据资产价值最重要的体现。基于此,本文主要介绍了如何实现数据表空值的筛选功能,旨在提高数据质量管理的工作效率。
[关键词]空项筛选;数据质量;数据表
doi:10.3969/j.issn.1673 - 0194.2019.14.077
[中图分类号]TP311.13[文献标识码]A[文章编号]1673-0194(2019)14-0-02
1 问题的提出
随着生产管理信息系统在油田的广泛应用,数据质量问题日益突出,生产数据在许多方面存在不同程度的质量缺陷,这些缺陷分布在各生产信息管理系统的各个环节,严重影响了系统的工作效率,用户还会对系统产生抵触情绪。数据质量分为很多类别,如及时性、完整性、准确性等。本文将针对数据完整性中的数据缺失数据筛查技术进行探索,从而提高数据质量,保障系统正常运行。
2 研究背景
本次筛查工作范围为A5系统涉及的历史回迁数据,历史数据整理是支持A5数据库建设的重要工作之一,为采油工程信息化建设建立“数据仓库”,为各单位扩展业务功能提供数据支持及便利。历史数据回迁涉及井基础数据、采油井测试、施工总结3大部分数据,在系统应用过程中,发现由于缺失历史数据,会影响系统的正常应用,因此,需要筛选缺失的数据,由专业人员对缺失数据进行补录,从而保证系统正常运行。
3 数据筛查原则
3.1 方便性
数据检查是一项烦琐、细致的工作,存在大量的重复性劳动。数据检查的首要原则就是方便性,通过研究数据检查的规则,进行标准化自动检查,减少人工干预,降低人为操作可能带来的错误率,使数据检查更为高效化、自动化。
3.2 实用性
数据检查还应体现实用性,检查过程应将数据的错误尽可能显示、输出,方便数据处理人员找到及修改错误数据。同时,数据检查应方便数据处理人员对数据进行标注、保存、导出修改后的正确数据等。
4 可行性分析
本次筛查工作共涉及开发静态、油田监测、井下作业10个表,数据项206个,具体如表1所示。
4.1 利用sql语句手动检查
手动检查需要对每个表的每个数据项写一条sql语句进行查询,将数据表的每个数据项的检查结果汇总到一个电子表格里。以daa02为例,sql语句如下。
Select jh,wjrq from daa02 where wjrq is null;
利用sql语句手动检查,每次检查都需要重复输入sql语句206条,并需要人工将检查结果汇总到一张电子表格中,工作量大,易出错,工作效率低。
4.2 利用程序自动检查
利用程序检查,需建立上述表的数据字典,针对每个数据表在Oracle后台建立一个存储过程和检查结果表,将检查的结果自动存入结果表。具体流程如图1所示。
此种方式减少了人工干预,降低了人为操作可能带来的错误率,可以实时监测,能够保障补录数据的检查工作,工作效率高。在筛查数据空项的过程中,查询语句中的数据项是变化的,能够实现自动查询功能,所以如何实现用变量代替sql语句查询列成为本项工作的难点。例如,在存储过程中一个查询语句如下。
select jh from v_bm where v_sjxdm is null;
传入的参数为表名和数据项名称,这种情况下,是无法执行的,使用动态sql语句便可以解决以上问题。
首先定义一个变量,用于存放要执行的sql语句,然后用连接符将查询语句和变量连接起来,然后调用execute immediate来执行。
str varchar2(2000);
str := 'insert into sjjc_daa02(jh) select jh from ' || v_bm || ' where ' || v_sjxdm || ' is null ';
execute immediate str;
经过分析,决定采用研发检测程序来对缺失数据进行筛查。
以daa02为例,其具体检查程序如下:
createorreplaceprocedure p_sjjc_daa02 is
v_bmvarchar2(10);
v_sjxdmvarchar2(10);
v_sjxmcvarchar2(50);
str varchar2(2000);
cursorc_sjzdis
selectbm, sjxdm, sjxmc
from sjzd_a5
wherepkeyisnull
andsfnullisnull
andbm = 'DAA02';
begin
openc_sjzd;
loop
fetchc_sjzd
intov_bm, v_sjxdm, v_sjxmc;
str := 'insert into sjjc_daa02(jh) select jh from ' || v_bm || ' where ' || v_sjxdm || ' is null ';
executeimmediate str;
update sjjc_daa02 set NULL_CLUM = v_sjxmcwhere NULL_CLUM isnull;
commit;
exitwhenc_sjzd%notfound;
endloop;
closec_sjzd;
end p_sjjc_daa02;
通過程序检查,共自动形成结果表10个,图2为daa05的检查结果表示例。
5 结 语
本次筛查10个数据表,共检查出空值33 812 256个,数据库建表、建立数据字典、编写检查程序时间为7天,此程序为通用程序,所有的数据表建立数据字典,就可通过此程序进行筛查,可重复使用。手动检查空值,10个数据表大概需要两周时间,并且不可重复使用,如果再次检查,需要重新写sql语句进行检查汇总。数据项空值检查只是数据质量管理的一部分,在今后的工作中将对数据的及时性、完整性、准确性等多方面进行检查,提升数据质量,确保各个生产系统平稳运行。
主要参考文献
[1]蒋嶷川,田盛丰.入侵检测中对系统日志审计信息进行数据挖掘的研究[J].计算机工程,2006(1).
[2]庞洋.基于数据挖掘的园区网综合安全审计系统研究与设计[D].郑州:中国人民解放军信息工程大学,2005.
[3]任建平.基于数据挖掘的实时入侵检测系统的研究[D].杭州:浙江大学,2006.
[4]胡敏,潘雪增,平玲娣.基于数据挖掘的实时入侵检测技术的研究[J].计算机应用研究,2007(8).