我已经谈到了构建属于你自己的数据仓库需要采取的前两个步骤(请参阅:如何在4周内构建数据仓库,第1部分)。选择架构和DBMS是需要完成的第一件事情。到目前为止,我们已经有了需要复制的数据的概念以及我们想要存储数据的数据库。缺失的部分就是复制的过程。我们如何存储复制的数据?我们如何转换数据?这些是我在这篇文章中所要回答的问题。
处理
有很多方法可以将事务数据库中的数据复制到DW(数据仓库)中。为了简单起见,假设我们每天运行一次作业来复制数据。但如果当时,我们的业务不能运行,那么事务数据库就没有被更新。因此我们要两个事务数据库(TDB1和TDB2),所以我们的DW必须包含来自两者的数据。
IMAGE1显示两个数据库有两种不同的模式,图中我们用数据仓库并且用一个问号来表明我们需要复制(还未知道如何复制)的数据。
我们将使用ETL(提取,转换和加载)作业来填充我们的DW。在这里我们有两个选择:
- 使其成为一个一步到位的过程。在这种情况下,我们只有一个ETL来完成所有的工作。它提取数据,将其转换到内存中并将其加载到DW中。
- 两步过程引入了一个临时区域。我们用两个ETL,而不是一个。第一个将数据从我们的事务数据库复制到暂存区域,进行一些最小限度的转换(如转换数据类型)。第二个ETL使用大量地转换将数据从暂存区复制到数据仓库。
让我们仔细看看这两种方法。
一步过程
一步到位的过程包含了一个可以处理所有事情的工作,它将来自不同输入源(比如TDB1和TDB2)的数据分类并合并到内存中,并将其加载到DW中。尽管这种方法是最简单的,但它有一些明显的缺陷:
- 这个过程是单一的。如果您在转换过程中引入了一些错误导致过程失败了,那么你就必须重新运行整个过程。不要忘了,在运行期间,你将不能进行重新运行操作,因为您的交易数据库还处于负载状态。
- 通常,最短的时间内访问远程服务器(您的数据库实例)是个好主意。但是这将不会允许您通过这种方式来进行ETL工作。
- 您将无法使用DBMS的功能来合并来自不同输入数据源的数据。一切的工作都必须由你来完成,这将很会很麻烦而且容易出错。
两步过程
两步过程包括两个工作:
- “复制到暂存区域”。它将我们的事务数据库(TDB1和TDB2)中的数据复制到另一个数据库 - 暂存区域。此时,我们不做任何复杂的转换。此步骤的目的是复制所有尚未处理的数据。
- “填充数据集”。它需要我们在暂存区中的数据转换并上传到DW中。它在处理所有数据后将清理暂存区。因此它从不会处理相同的数据两次。
如果你选择这种方法,你将会得到以下几个好处:
- 只有第一步涉及到你的事务数据库。您可以根据需要多次重新运行“填充数据集”,而不会影响事务数据库。这意味着它可以在工作时间内完成任务。这个方面非常重要,因为“复制到分段”实施起来非常简单,并且不会引起任何问题。
- 将来自我们输入源的所有数据放在一个位置,这可以让您使用DBMS的功能来加入,合并和过滤数据。
虽然,引入额外的步骤(将数据复制到暂存区域)可能会导致开始时的实施复杂化,但如果考虑您所获得的好处,耗费的成本并不算太高。而且该过程更可靠,更容易扩展。另外,使用DBMS连接来自多个输入源的数据的能力将为您节省大量时间。
另外,我想分享关于实现细节的一些想法。
其他实施说明:使用BI平台
- 像Pentaho这样的BI平台将为您提供编写和执行ETL作业的所有功能。如果您没有多少时间,并且您不介意使用拖放式编程,则可以在几天内编写所需的所有ETL作业。
- 虽然,我是现成解决方案(比如BI平台)的主要支持者,但从多方面看,从头开始编写所有东西是更好的方法。您将不必再部署和支持另一个Tomcat实例。其次,BI平台离敏捷还很远。因此,手动完成是测试ETL作业的唯一方法,这基本上会导致任何方面的重构变得非常费劲。当然,保持ETL工作的空闲是很困难的,在未来,这将会增加进行修改的成本。
其他实施说明:将数据复制到分段
大部分需要复制的表格都属于以下类型之一:
- 一些参考表格最多包含几千行。因此您将不必麻烦,只需要每晚将整个表格都复制一遍。。
- 包含不可变数据的表。您可以使用主ID来复制新行。
- 包含可变数据并具有“updated_at”种类列的表。依据此列查找已更新的数据。
在某些情况下,并不那么容易:
- 例如,您可能需要加入几个表来查找更新的行。或者为一个表使用许多列(例如primary_id,inserted_at和updated_at)。
结论
最后,我想再说一次,它不像人们所说的那么复杂。依靠一个人建立一个简单的数据仓库是可以在一个月内完成的任务。当然,它背后有很多理论(比如如何处理不同类型的规则等)。但是为了给你的业务带来一些价值,你不需要具体知道所有理论,仅仅了解基本知识就足够了。
从http://victorsavkin.com/post/9875068942/how-to-build-a-data-warehouse-in-4-weeks-part-2