2.7 提取-转换-装载、提取-装载-转换和复制
从生产数据库获取数据至多种数据存储,数据必然被复制。例如,数据需要从生产数据库复制到数据中转区或者ODS,从ODS到数据仓库,从数据仓库到数据集市,等等。然而,存储在生产数据库中的数据形式和内容与用户希望在报告和分析工具中看到的非常不同。例如,在生产系统中,客户的数据可能分散在多个数据库中,但是用户想要看到完整的信息;生产系统中的数据可能被多次编码过,然而用户希望看到其有意义的价值;历史数据可能会从源系统中丢失,但是用户恰好需要它做趋势分析;或者源系统中数据元素的值可能是不正确的(错误数据),但是用户需要正确的数据来工作。总之,源数据需要在使用之前被“处理”。这整个过程有时候被称为数据转换。所以,当数据从生产数据库经过数据中转区移动到数据仓库时,它一定会发生转换。
各个组织可以使用自己定制的应用来完成所需要的转换,但是需使用专用工具。这将提高生产力和可维护性。在1.2节,在商务智能系统中复制数据的三种常用的技术—ETL、ELT和复制—已经简单地介绍过了。在这一节将会详细讲解。
注意:数据虚拟化也是数据转换的一种形式。商务智能系统中的技术将会如何发展、何时被应用将在第7章深入讨论。
2.7.1 提取-转换-装载
数据提取-转换-装载(ETL)是最受欢迎的数据复制和转换技术之一。通过ETL工具,数据从一个或多个源数据存储区中抽取出。然后被转换、清洗、整合,最后被存储在一个目标数据存储区(如图2-12所示)。在很多商务智能系统中,生产数据库和数据中转区是典型的源数据存储区,而数据集市和PDS则是典型的目标数据存储区。
处理数据过程中所有要使用的必要操作在ETL脚本中是很明确的。每个ETL工具都提供一系列广泛的加工数据的操作,从最简单的转换,例如两个字符串的连接,到高度复杂的转换,如分行。数据也会被整合、总结和清洗。大部分ETL工具支持流程语言来详细说明这些操作。图2-13中的屏幕截图就包含一个描绘这种流程说明的例子。流程图中的每个图标代表一种操作。
ETL工具用来复制数据,被设计成批量处理的模式,所以每当ETL脚本运行时,它其实操作了整批数据。例如,上周CUSTOMER表所有插入的、更新的和删除的数据已经被复制到目标数据存储区了。换句话说,目标数据存储区中的数据会周期性地被更新。ETL的脚本是预先规定的—例如,每周末的下午2点、每晚11点或者每隔两个小时都会运行。本书中我们称这种形式的转换为预定的转换。大部分的ETL也支持传承影响分析能力,所以设计者也需要学习表格结构和ETL说明。
2.7.2 提取-装载-转换
提取-装载-转换(ELT)在操作步骤顺序上与ETL不同。ETL是把数据从源数据存储区中提取出来后进行转换,转换的数据然后被存储(装载)在目标数据存储区(如图2-14所示)。ELT也是以数据提取开始,然后以未转换的形式存储在目标存储区;最后一步中,数据才会被转换并再次存储。最终,ETL 和ELT都达到了相同的效果:转换的数据存储在目标数据存储区。
注意:称之为ELTL比ELT更好,因为它始于数据提取,然后经过装载、转换,最终转换过的数据再次被装载。
除去操作执行顺序的不同,ETL和ELT方式工作的另一个不同之处在于与数据库服务器的连接。在ETL中,工具做了大部分的提升工作。它们处理了所有复杂的转换操作并使用数据库服务器简单地提取源数据和插入新的转换数据。在某种程度上,ETL中数据库服务器功能并未得到充分使用。
ELT工具则试着将数据库服务器的更多功能发挥出来。许多转换和整合操作也可由数据库服务器处理。所以ELT工具将大部分操作代理给了数据库服务器。如同ELT工具是操纵者,而数据库服务器是被操控者。它告诉数据库服务器要检索、转换和装载数据。这样做的效果就是当数据被装载进一系列表格之后,相同的数据也会被检索、转换、整合、过滤并被复制到另一个表格。这类操作都可以通过使用所谓的INSERT-SELECT语句由数据库服务器很容易地完成。有时数据库服务器的这种代理操作也被称为下推。
这种操作在数据库服务器中实现的好处是ELT服务器和数据库服务器之间的数据转换不会浪费时间。大部分的数据操作由数据库服务器本身完成。这样,数据库服务器的全部功能就被发挥出来。另一个优势是目标数据库还保存了原始的未经转换的数据和转换了的数据。对许多数据使用者来说,能使用原始数据是很有帮助的。
注意:对于工具,越来越多的工具不仅支持ETL也支持ELT功能。这取决于设计者在哪种情形下使用哪种形式。
2.7.3 复制
第三种拷贝的形式被称为复制。如同ETL和ELT一样,通过复制,数据可以从一个数据存储区拷贝到另一个存储区。然而,ETL和ELT采用最优化的方式成批地拷贝数据(大量记录被同时拷贝),而复制中拷贝是一条条记录、一点点地实现。复制通常是在插入、更新或者删除其他数据时或者尽可能快到毫秒级别的时候使用。除此之外,我们希望复制能减小对源数据存储区的干扰。复制的主要目标是速度,同ETL相比,它的数据整合和转换能力就被限制了。
复制技术非常适合从生产数据库拷贝数据到数据中转区或ODS,但是不适合拷贝到数据集市和PDS。通常这两类操作不会连续被刷新。使用复制使它们保持最新没有任何意义。
为了减小对源系统的干扰,很多复制工具能够从日志文件中而不是从数据已经改变的数据库文件中提取数据。这意味着复制操作经常检测这些日志文件来检查一项交易是否已经完成。如果已经完成,相关的数据就会从日志文件中拷贝到目标系统中。这种读取日志文件的方式有时被称为改变数据捕捉(CDC)。