抽取,转换和装载这三部分占据了一个企业级数据仓库项目超过70%的执行工作量。虽然典型的BI项目花费了大量时间和精力来建立全面的数据仓库架构,但是设计ETL体系结构的细节并没有得到应有的重视和研究。现在已经有一系列的技术和基础架构存在于该领域,然而这些都来自于架构师们在先前项目中的经验,并且其方法更像是基于第三方项目管理约束条件而提出的.本文阐述了一个更加客观及具有分析性的ETL和数据流架构选择方法,该方法基于一组具有客观性的变量,以增强整个数据仓库解决方案的可靠性。
数据流体系结构
可靠性在整个数据流中是非常重要的一部分,它能确保数据仓库符合服务级协议提出的要求。尽管数据验证工作可以确保数据的正确性及质量变动的可接受范围,我们仍然需要关注影响数据流从源系统到表现层可靠性的关键因素,以便在ETL的详细设计阶段采取适当措施。
考虑典型(5 * 5)数据仓库架构,如图1。数据是从源系统分段转移到ODS系统中的,然后流向数据仓库,再到达数据集市,最后流向数据表现层。在数据到达用户之前,会经历5个ETL阶段,每一个阶段就像是一个大链条中的一环,因此确保每个阶段的可靠性非常重要。
可靠性解析
一个拥有n个串联组件的系统可靠性(R)等于
R = R1 * R2 * R3 * R4 * R5 *……………* Rn,这里Ri = 系统中某一个独立组件的可靠性。
一个拥有n个并联组件的系统可靠性(R)等于
R = 1/((1/R1 + 1/R2 + 1/R3 + 1/R4 + 1/R5 +……………+ 1/Rn)/n),这里Ri = 系统中某一个独立组件的可靠性。
对一个数据仓库架构中的数据流运用上述原则,则有两个影响整体可靠性的基本变量。它们是:
N = 从开始到结束的阶段数或者数据流组件的数量。
Ri = 某一个阶段的可靠性。
阶段的数量
对于整个ETL数据流程来说,阶段的数量也是非常重要的,因为阶段数的增加会让整体可靠性减少。试想一个系统中有三个阶段的串联,每个阶段互相之间存在0.9的可靠性。该系统的整体可靠性就应该等于 0.73(0.9 * 0.9 * 0.9)。如果再添加另一个阶段到此系统中,那么可靠性降低到了0.65(= 0.9 * 0.9 * 0.9 * 0.9)。
独立组件的可靠性
下面的章节我们将会介绍,如何计算数据流中每个ETL阶段的可靠性。在所有这些示例当中,我们先假设这个过程已通过测试和验证,并具有100%的估算可靠性。
案例1
数据从源系统中提取完成,然后以平面文件的形式存储在服务器、分区或者文件夹中,另一个ETL程序则使用此平面文件来进行转换和加载数据表(参见图2)。
这种类型的ETL阶段的可靠性,可以计算为:
Ri = r1 * r2 * r3
r1 = 图2 process 1的可靠性,基于以往经验从实际作用上来讲,可以假设它是源系统的可用性。
r2 = 图2 process 2的可靠性,可以认为它是存储平面文件的服务器/分区/文件夹的可用性。
r3 = 图2 process 3的可靠性,这个相当于目标表所在服务器/分区/文件夹的可用性。
案例2
一个程序中要做的ETL(参见图3)。这样一个阶段的可靠性,可以计算为:
Ri = r1 * r2 这里
r1 = Process A的可靠性,它等于源系统的可用性。
r2 = Process B的可靠性,可以假设它是目标服务器的可用性。
对上述两起案例快速比较的显示,案例1相比案例2而言,将始终产生较低的可靠性。
关于具体如何计算:请看一个示例
在图4中,一个企业级的数据仓库中的ETL有三个阶段:数据来源阶段,数据仓库分区阶段,数据仓库转移到数据集市阶段,数据显示层通过访问数据集市来产生报表和分析。这个案例当中有4个源系统。服务器可用性的细节列于括号内。
E1的可靠性 = 1/((1/0.95) + (1/0.93) + (1/0.96) + (1/0.90)/4) * 0.98 = 0.81 (从多个源数据中到阶段的数据流是并行的。)
E2的可靠性= 0.98 * 0.94 = 0.92
E3的可靠性= 0.94 * 0.97 = 0.91
企业数据仓库的整体数据流的可靠性EDW = 0.81 * 0.92 * 0.91 = 0.68
正如你所看到的,数据流的整体可靠性低于70%,即使个别组件在系统的可用性达到90%以上。
作用
基于组成数据仓库环境的源系统和基础结构的可用性,我们就能利用这个概念判断数据仓库可达到的服务级别。当潜在需求非常严格的时候,数据仓库团队在指定系统的服务级别以供商业运用之前,必须仔细审查系统的整体可靠性。另一方面,如果就业务角度而言需要一定的服务级别,那么建议对整体的ETL体系结构和数据流加以研究,以尽量改善数据仓库框架中各个组件或过程的可靠性。