1.4 什么是ETL
ETL是Extract-Transform-Load的缩写,中文名为数据仓库技术,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL的目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。ETL是商务智能项目中的重要环节。通常情况下,在商务智能项目中,ETL会花掉整个项目至少1/3的时间。ETL设计的好坏直接关接到商务智能项目的成败。
1.4.1 数据的抽取
要想实现数据的抽取,就需要在调研阶段做大量的工作。首先要搞清楚数据是从几个业务系统中来,各个业务系统的数据库服务器运行什么数据库管理系统(Data Base Management System,DBMS),是否存在手工数据,手工数据量有多大,是否存在非结构化的数据等。在收集完这些信息之后,我们才可以进行数据抽取的设计。
1.对于与数据仓库的数据库系统相同的数据源处理方法
这一类数据源在设计上比较容易。一般情况下,DBMS都会提供数据库链接功能,在数据仓库数据库服务器和原业务系统之间建立直接的链接关系就可以写Select语句直接访问。
2.对于与数据仓库数据库系统不同的数据源的处理方法
对于这一类数据源,一般情况下,也可以通过开放数据库链接(Open Database lonnectivity,ODBC)的方式建立数据库链接,如SQL Server和Oracle之间。如果不能建立数据库链接,则可以使用其他两种方式完成:一种是通过工具将源数据导出成“.txt”格式或者是“.xls”格式的文件,然后再将这些源系统文件导入到操作数据存储(Operational Date Store,ODS)中;另一种方法是通过程序接口来完成。
3.对于不同文件类型的数据源
业务人员可以利用数据库工具将不同文件类型的数据导入到指定的数据库,然后从指定的数据库中抽取。这还可以借助工具来实现。
4.增量更新的问题
对于数据量大的系统,必须考虑增量抽取。一般情况下,业务系统会记录业务发生的时间,可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。利用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。
1.4.2 数据的清洗
数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉,还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。
1.不完整的数据
这一类数据缺失一些应该有的信息,如缺失供应商的名称、分企业的名称、客户的所属区域等信息或业务系统中的主表与明细表不能匹配等。需将这一类数据过滤出来,然后按缺失的内容分别写入不同Excel文件,再向客户提交,要求客户在规定的时间内补全。补全后才可写入数据仓库。
2.错误的数据
错误数据主要是因业务系统不够健全,在接收输入后没有进行判断就直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类、对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取;日期格式不正确的或者是日期越界的错误会导致ETL运行失败。这一类错误需要去业务系统数据库用SQL的方式挑出来,然后交给业务主管部门要求限期修正,修正之后再抽取。
3.重复的数据
这一类数据经常在维表中出现。这时需将重复数据的所有字段导出来,让客户确认并整理。
数据清洗是一个反复的过程,不可能在几天内完成,我们只能不断地发现问题、解决问题。对于是否过滤、是否修正,一般要求客户确认。对于过滤掉的数据,可写入Excel文件或者非Excel类型的数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,以尽快修正错误。数据清洗时需要注意的是:不要将有用的数据过滤掉,对于每个过滤规则都要认真进行验证,并要用户确认。
1.4.3 数据的转换
数据转换的主要任务是进行不一致的数据转换、数据粒度的转换,以及一些商务规则和指标的计算。
1.转换不一致的数据
这个过程是一个整合的过程,是将不同业务系统的相同类型的数据统一的过程,比如同一个供应商在结算系统的编码是XX0001,而在CRM中的编码是YY0001,这就需要进行数据转换,以统一编码。
2.转换数据粒度
业务系统一般存储非常明细的数据,而数据仓库中的数据是用来分析的,不需要非常明细的数据。一般情况下,会将业务系统中的数据按照数据仓库的粒度进行聚合。
3.计算商务规则和指标
不同的企业有不同的业务规则、不同的数据指标,这些规则和指标有的时候不是简单的加加减减就能完成的。这个时候需要在ETL中对这些数据指标进行计算,之后存储在数据仓库中,以供分析使用。
ETL是商务智能项目的关键部分,也是一个长期的过程,只有不断地发现问题并解决问题,才能使ETL运行效率更高,从而为商务智能项目的后期开发提供准确与高效的数据。