业务大数据采集处理的“取”与“还”

作 者:
薛宁 

作者简介:
薛宁,湖北省武汉市审计局

原文出处:
中国审计

内容提要:


期刊代号:V3
分类名称:审计文摘
复印期号:2015 年 01 期

关 键 词:

字号:

      随着数字化审计进入到大数据时代,如何做好业务大数据的采集和处理工作,成为摆在审计人员面前的一道难题,也是关系审计项目开展至关重要的首个战场。在某道路车辆通行费信息系统审计项目中,面对日均50万次通行、每月1500万条记录、仅通行记录就超过4亿条的业务大数据,湖北省武汉市审计局不断探索应用技术和方法,做好数据的采集、分析清理和还原工作,为整个项目顺利实施打下基础。

      “还”,即恢复庞大的数据,尝试数据库平台中提供的大容量数据导入技术;分析处理大数据中包含的记录,选择“分区表”这一项近年来出现并流行的技术,提升查询语句的效率。

      “取”,即获取庞大的数据。这个问题之所以放在后面,并非本末倒置,而是受前述“还”的限制——为了使用大容量数据导入技术,使用文本文件的方式,也带来了文本文件的新用途,随后一一述说。

      “取”数据

      (一)方式选择

      直接连接被审计单位的业务系统并不是一个合适的选择:首先,这种方式可能影响被审计单位业务系统的正常运行;其次,数据传输或转换过程中如果有错误发生,则没有对数据进行整理的机会;最后,一旦错误发生,数据采集需要从头再来,除非有依据可以把已经导入的数据清晰地划分出来。

      而使用文本文件有着明显的优势:可以对业务数据按时间段分批导出,选择业务系统比较空闲的时段进行;可以控制文本文件的大小,并对文件中的数据进行初步整理。

      (二)文本规范约定

      “取”数据的关键点,是双方约定数据的时间范围以及文本规范,主要包括:

      1.约定采集数据的时间范围。

      2.数据文件的分段。可以按照时间来分段导出,也可以按照文件大小来分段导出。核心目的是减少大文件的出现。

      3.约定数据文件的字段顺序。字段的顺序最好与建表语句一致(如果不一致,则要根据数据文件中的字段顺序,修改导入数据操作时指定的格式化文件,以保持二者的一致)。

      4.约定字段分隔符和行分隔符。

      5.约定文本类型字段的标识符。

      6.约定日期字段的文本格式,一般选择yyyy-mm-dd和hh:mi:ss.mmm的格式。

      7.约定空值字段的导出形式。

      (三)“取”数据的步骤

      1.约定数据的时间范围以及文本规范。

      2.获取相应业务表的建表语句。如果表名和字段都是字母形式,则还要提供表名和字段的中文含义。

      3.获得文本格式数据文件。

      “还”数据

      (一)数据导入技术

      SQL Server的数据库平台中提供大容量数据导入技术,主要有命令行方式的bcp命令以及Transact-SQL的bulk insert语句和openrowset(bulk...)语句。这三种方式都使用大容量日志恢复模式,高效地完成从文本文件到数据库的大容量数据复制工作,而bcp命令还支持从数据库到文本文件的逆向大容量数据复制工作。

      (二)分区表简介

      分区表是使用“分区函数”依据记录中“分区字段”的值对其进行分类,分别放入“分区方案”所定义的文件组中。从而将一个巨大的表从逻辑上分为若干小表,一旦查询满足分区的条件,将简化查询的数据规模。这种实现对于查询语句来说是透明的,也就是说审计人员在查询时不用关心是否是分区表。增加的操作是定义合适的分区函数、分区方案,并将分区函数添加至需要创建为分区表的建表语句中即可。

      分区函数一般选择整型、日期型、字符串型等为分区依据;分区方案则既要与分区函数对应,又要考虑到存储系统的性能。可以在创建表时直接将其定义为分区表,也可在需要时把普通的表更改为分区表,在操作上略有不同。如果可能的话,建议在创建表时直接定义为分区表,因为把普通表改为分区表,涉及大量的数据录入操作。

      (三)“原”数据的步骤

      1.根据业务数据的具体情况,定义合适的分区函数和分区方案。

      2.转换建表语句。将“取”到的建表语句,转换为SQL Server的标准;如果需要定义为分区表,则要添加分区表的语句定义部分。

      3.创建表结构。检查无误后执行,将表结构由定义变为现实(不要在导入数据前创建索引)。

      4.检查数据文件,看是否有格式上的错误。如果是全局性的现象,必须进行修正。

      5.生成每一个表的格式化文件。格式化文件是大容量数据导入数据的基础条件,可以依据步骤2中创建好的表,使用bcp的命令生成格式化文件。

      命令如下:

      bcp ETCAudit.dbo.CBS_SUBLEDGER_OBU format nulc-T-x-f D:\DFormat\OBU车辆通行费明细账-c.xml-t“|”

      6.使用bulk insert语句,将文本文件的数据导入至数据库中。可以选择任意三种方式的数据导入技术,选择不同,执行的环境不同。下面是bulk insert的示例(FROM后面跟的是文本文件的全路径文件名,FORMATFILE指定了格式化文件,ERRORFILE指定了导入过程中出错的数据存放的文件)。

      语句如下:

      BULK INSERT CBS_SUBLEDGER_OBU

      FROM ‘D:\审计数据\OBU车辆通行费明细账20110701-20110731.txt’

      WITH(CHECK_CONSTRAINTS,CODEPAGE=‘RA W’,DATAFILETYPE=‘char’,

      FORMATFILE=‘D:\DFormat\OBU车辆通行费明细账-c.xml’,

相关文章: