在Data Vault 2.0版本里,其不只是针对数据仓库的建模,同时也包含了架构,方法论以及实现。这篇挑几个概念,附上我个人对其的理解。同时也把这个系列的名字改成《Data Vault玩转数据仓库》。
ETL和ELT
ELT火了有段时间,百度上高雅的介绍很多,不扯别的,咱直接来点俗的:
- E就是抽取,数据从源系统进入到数据仓库的过程。
- T是指转换,类型转换,计算什么的都算在内。
- L加载,把结果加载到数据仓库里。
- E和L可能从汉语的角度看有些像,如果说区别的话就是前者是从源系统到数据仓库的,后者是数据仓库内的折腾。
- ETL就是把数据从源系统抽取的过程中做转换。
-- 缺点是这个过程也会消耗源系统的资源,可能对源系统造成影响,比如对方在做日结。
- ELT就是把数据先原封不动的放在DWH底层里,然后再在这个基础上做转换。
-- 这样除了抽取消耗点源系统的资源,剩下的处理都是消耗数据仓库的资源,降低对源系统的影响。
所以数据仓库项目通常建议用ELT的方法,除非源系统的数据和压力没那么大。
STAGE和PSA
这个概念好多地方的解释都不太一样,以下是我个人的理解:
STAGE层负责整合,源系统的数据一对一的放在这里,比如你的数据仓库是SQL Server,那么甭管源系统是Oracle还是MySQL,通过数据加载工具都变成SQL Server的加载到这里。
STAGE再往下就是PSA,跟STAGE不同的是PSA是要保留数据的历史状态的。关于如何保留目前主流有两个方法,一个是基于SCD2的方法论,一个是INSERT ONLY的方法论。相对支持后者的比较多一些,主要是因为SCD2对于更新或者删除数据的处理需要找到历史的数据进行物理更新(UPDATE VALUT_TO_DATE),在数据量很大的时候性能影响很大。而INSERT ONLY的方法在后期查询的时候会麻烦一些,因为它只有VALID_FROM_DATE,而没有VALID_TO_DATE,所以在下游处理的时候就需要根据记录的时间线把其算出来。
至于如何快速比对一个数据是否变化了,请参考我的上一篇。
我也见很多人在讨论,有PSA了还需要DV吗?这个我个人理解还是好比盖高楼,业主着急住,但是电梯还没装,业主能住吗?能,也不能。这个问题是同样的道理。
自动化的工具
有什么工具可以基于配置来通过元数据以及数据建模的方式自动化生成Data Vault模型呢?
首先是大名鼎鼎的ERWin,从官网可以看到其对Data Vault的支持。业界老品牌,知名度高。这家公司在国内有雇员,所以感觉英文有压力的话可以寻求他们的辅助。
在这个圈子里比较火的是WhereScape,也是海外厂商。主要是有Dan Linsted为其站台。这个平台目前我没有发现中文的支持,所以跟这家公司沟通需要英文功底。
以上两款工具都是商业软件,没有免费以及社区版本,就连试用版本(针对data vault自动化这部分)也没有,特殊版本更不用说。授权和支持费用不低,但是考虑到项目总体成本的话还是很划算的,比如在北京雇佣一个中级ETL开发,一年的成本差不多就够这个软件的授权和支持费用了。而如果不用这类工具,你的成本肯定不止一个程序员的成本。
再说开源的平台,我个人一直在关注Roelant vos的开源项目,在github上很容易找到。我在做自己的自动化工具的时候也参考了他很多的想法和实现,比如handlebars的模板结合元数据自动生成代码,还有DGML来可视化观察数据的来龙去脉等。同时他的博客也不错,在这个领域贡献了很多内容,这个在我第一篇中也有提到。