ETL方案 抽取方法的选择方法一:在数据仓库服务器上建一个临时表,将所需的字段值先抽取到该表中,然后进行标准化和汇总装载到数据仓库中。方法二:用复杂的SQL语句将多表关联选取相应的字段转载到数据仓库中。对于方法一,可以提高数据抽取的效率,抽取方法和语句也比较简单。但是需要在数据仓库服务器上开辟另外的存储空间,如果数据量大,需要的存储空间也大。同时在数据仓库服务器上进行标准化和汇总,增加数据仓库服务器的负担,可能会影响到它的效率。对于方法二,在抽取过程中进行了一些转换,可以直接装载数据到数据仓库中,数据仓库服务器不需要额外的空间来存储临时表和对数据进行标准化处理。但是数据抽取过程很复杂,SQL会很繁琐,而且涉及到多表关联,效率会比较低。对于数据源分布在多个系统中这种方法是行不通的。综合考虑各种方法,方法一可实施程度高。初始装载时,按照所涉及到的源系统的表结构选取需要的字段建立新的表。第一次装载时,采用静态数据捕获,将源数据表的数据全部抽取到临时表中。通过编程或工具对临时表中的数据进行转换,并且进行对数据按照数据仓库的要求进行标准化处理,设置默认值。然后装载到数据仓库中。对以后数据的抽取可以(1)通过对交易日志中对哪些记录进行了update、insert、delete操作,将这些记录抽取到数据仓库中,但是这种方法需要源系统的数据库系统有交易日志可查,另外对交易日志的格式需要编写专门的程序来进行处理。源系统是Informix数据库,(2)通过在源系统的数据库中设置触发器,每当有update、insert、delete操作时时触发一个事件将发生改变的记录抽取到临时存储区中,但是这样对源系统有一些影响。(3)将今天的抽取和昨天的抽取进行比较,找出它们之间的变化,将有update、insert、delete操作的记录抽取到临时表中,这种方法不太适合有大量数据的系统,因为文件太大,不容易进行比较找出变化的记录。(4)通过时间戳来进行数据的抽取,这种方法要求源系统中的数据表中含有日期和时间标记的字段。每次源系统进行update、insert、delete操作时都有时间和日期记录。在每次抽取后在这次抽取的时间和日期作一个时间标记,下次抽取时只需抽取在时间标记后进行update、insert、delete操作的记录。这种方法适合改动比较少的数据表。(5)通过在源程序写入所有update、insert、delete操作,抽取程序捕获源数据变化的文件。这种方法需要修改源程序,需要对它进行维护。一般而言,不会采取这种方法。各种数据抽取方式的比较 灵活性 对源系统的影响 是否需要修改应用程序 能否用在面向文件的系统中 能否使用工具来实现 能否在旧系统中使用静态数据捕获 较好 没有影响 不需要 能 能 能交易日志捕获 不那么灵活 没有影响 不需要 不能 能 可以在大多数数据库触发器捕获 不那么灵活 有一点影响 不需要 不能 能 不能在大多数在源程序中捕获 好 有一点影响 很大的修改 能 不能 能时间戳捕获 好 没有影响 很大的修改 能 能 不能在大多数文件比较捕获 好 没有影响 不需要 能 能 可以在大多数 各种数据抽取方式的适合情况(×表示不允许) 数据量大 没有修改源数据表的权限 没有时间戳 没有有交易日志 不允许修改源系统的应用程序 静态数据捕获 交易日志捕获 × 数据库触发器捕获 × 在源程序中捕获 × 时间戳捕获 × 文件比较捕获 × 对数据抽取方法的选择,首先要考虑的有哪些方法具有实施的条件,哪些方法没有实施的条件。方法实施的效率,因为每个源系统给予数据抽取的时间窗口有限,可以采用并行处理的方式,将一个大的数据抽取分成几个小的数据抽取进行并行处理。对于初始抽取采用静态数据抽取。对以后的抽取而言,如果用时间戳的方式可以实现,用时间戳的方式,因为这种方式根据时间标记比较容易判断出哪些数据已经抽取到临时存储区,哪些数据还没有进行抽取,我们只需要抽取哪些没有进行抽取的数据记录。如果不能采用时间戳的方式,可以考虑采用交易日志的方式,交易日志处理需要专门的程序。但是对一个数据库而言它的日志格式是固定的,目前主要是Informix、SQL Server等数据库,只需要编写这几种数据库日志格式处理的程序即可,而且不需要关心源系统,也不会影响到源系统。如果交易日志不能实现,采用多次抽取文件进行比较的方式。对于源程序中捕获的方式基本上不予考虑,因为目前我行的系统很多,不可能修改每一个系统来为数据捕获。当然,也有可能是多种数据抽取方法的综合选择。 对于数据转换主要从以下方面进行转换:(1)格式修正。包括数据类型和单个字段的变化。例如,类型在各种源系统中定义不一致,需要对它们进行标准化;(2)字段的解码。一些用1和2来表示男性和女性,另一个系统用M和F来表示。一些难以理解的表示方法如BJ、SH等。数据仓库需要用户可以理解的值,因此需要对这些值进行解码。(3)计算值和导出值。一些字段在导入数据仓库时需要进行计算。主要是事实表的数据。(4)单个字段的分离。例如有些系统中将地址和名称写在一个字段里,在数据仓库中为了分析的方便需要将这些信息分离成地址和名称二个字段。(5)信息的合并。例如信贷的发生额在DCC中,而客户的详细信息在CMIS系统中,如果要得到完整的信息,就必须将二个系统的数据进行合并。(6)特征集合转化。例如源系统使用大型机,它的文本格式采用EBCDIC格式,而数据仓库基于微机系统,采用ASCII格式,这样需要进行特征集合转化。(7)度量单位的转化。例如国内的贷款使用人民币,而涉外的贷款会使用到美元,装入到数据仓库是必须要统一货币类型。(8)日期/时间转化。这与操作系统和数据库管理系统设置有关,如在Informix中11/10/2004表示2004年10月11日,而在SQL Server中可能表示2004年11月10日。(9)汇总。例如由于粒度需要,在转入数据仓库时一天的发放贷款数据汇总,这样需要对一天的贷款发生额进行汇总。(10)键的重新构造。例如在源系统中是以机构编号作为主键,如果在机构维度表中继续采用机构编号作为主键,在一个机构的机构编号发生变化时,就没有办法判断这二个机构编号是属于同一个机构。因此我们采用机构维度表自己生成的键作为主键,机构编号变化时只要加上一个指向新编号的指针即可。以上是数据转换要考虑的方面,针对单一主题,在数据仓库服务器上编写相应的SQL语句或者编写相应的程序进行转换。数据装载有四种方式:装载、追加、破坏性合并、建设性合并。装载:将数据准备区的数据装载到数据仓库中,如果数据仓库中原来有数据,则先全部清除后,在进行装载。追加:将数据准备区的数据追加到数据仓库中,当已输入记录与已存在记录重复时,要定义如何处理这条记录的副本,可以作为副本增加进去,也可以将其丢弃。破坏性合并:如果数据仓库中不存在数据准备区的数据相同的键值,就将数据准备区的数据加入到数据仓库中。如果已存在某个键值,则将该键值的内容进行更新。建设性合并:将数据准备区的数据加入到数据仓库中。如果已存在某个键值,则将新加入的记录作一个标记,表示是对旧记录的替代。初始装载:一次对整个数据仓库进行装载,可以将数据装载分为几个在装载,每个子装载可以采用上述四种方式的任何一种。对一个表的初始装载的第一次允许,可以采用装载的方法,以后的过程可以采用追加。增量装载:一般采用建设性合并。对于任何历史性观察不重要的目标表,如一个维度表的一条记录变化意味着纠正自己的错误,旧记录被新纪录代替,采用破坏性合并。完全刷新:这种类型应用于周期性地重写整体数据仓库。与初始装载不同的是在装入数据时必须将原来的数据删除。可以采用装载和追加的方法。对于初始数据的装载采用装载的方式,以后可以采用增量转载和周期性刷新。 数据更新和刷新如果当更新的记录数达到15%-25%时,更新的所需的成本会高于刷新,否则,刷新的成本高于刷新。 维度表的更新如果变化值与已有维度值相匹配,则维度表不进行更新,否则对维度表进行更新。对维度表的修改有三种类型:改正错误、保存历史数据、暂时的修改改正错误,如客户维度表中姓名输错了,输入正确姓名后,旧的姓名没有必要保留,用新的姓名进行替代。保存历史数据:如客户的婚姻状态发生改变,需要重新一个分配键值,记录该客户新的信息,并将原来的记录指向这条新的记录。暂时的修改:对于保存历史数据的修改中,如果要对跨时期进行分析。如客户2004年10月1日搬迁了地址,要对客户在2004年9月1日至2004年11月1日之间的贷款进行分析,这样需要在键值不变的情况下,增加客户新的地址,并修改它的有效日期。 事实表的更新在装载每一条事实表记录之前,需相应的维度表的键为事实表记录创建连接键(外键)。确认历史数据是否对数据仓库有用,定义和改进抽取商业规则,捕获审查数据,执行事实表代理键,改善事实表内容,数据重构,准备装载文件。
TAG:
ETLce
10秒注册会员 结交数据仓库朋友 分享你的精彩
