利用Data vault对数据仓库建模
简介
国内关于Data Vault的信息很少,所以决定写点什么,纯粹都是自己在这个行业10多年的摸爬滚打。不过为了效率,尽量做到简短,直接上干货。对于各个细节大家有不同的理解欢迎来讨论。
数据仓库建模的方法有哪些。
首先最经典的是数据仓库Inmon基于3NF的方法。这个方法知道概念的人很多,但是实际用的很少,也不建议你去了解更多,因为目前在国内的招聘网站上你会很少找到这个。
其次是Kimball的维度建模方法,这个基本上做过数据仓库的都用过,比如事实表和维度表,基于这种理论也可以构建数据立方体方便分析。其特点是简单快速,适合中小型数据仓库。招聘网站上九成以上关于数据仓库的招聘都会要求这个。
然后是Dan的Data Vault建模方法。这个国内知道的不多。不同于维度方法,它的基本表是LINK,HUB以及SAT表。这个方法论连Inmon都说好,只是圈子实在太小。这个方法论比较适合企业级数据仓库,以及大数据的场景。
为什么要Data Vault
关于DV的各种好处官方站点提了好多,但说得都很marketing。以下是我个人的理解:
- 适合企业级数据仓库。
- 适合大数据项目,是的,在大数据中你怎么去组织数据,直接扔那?还是用维度模型?是不是都不太合适?那你应该考虑Data Vault。
- 比较容易根据元数据系统去自动生成相应的代码。这个在下面我会介绍一些。
谁更爱DV?
这是一个很有意思的问题,同时你也可以看到这个话题在国内是多么冷门。
从我阅读到的文章观察到信息来看,首先是欧洲比较火热,其次是北美,然后是澳洲。
在欧洲,德国人似乎更爱这个话题,在海外网站偶尔能看到德国人写的文章以及在讨论相关的问题,所以,汽车领域会见到的比较多。开源的项目以及商业相关的项目,也大多数都是欧洲的公司。
在国内看到的讨论和文章真的是少之又少,目前我所观察到的是阿里有人在讨论,但是不确定是在哪个部门。
维度模型还是DV?
维度模型和DV的关系,我觉得他俩是不冲突的。在我自己参考别人的方法制定的规范中,核心层用的方法是DV,然后在集市层用到的方法就是维度模型和宽表。
如果你的前端有对应的OLAP Cube工具的话,那么维度模型确实是必要的。
在核心层,相比维度模型,DV就比较容易对各个系统的数据进行整合和关系的管理。
想知道关于Data Vault更多的信息?
首先你可以去都Dan的网站:
对英文多少有点要求,主要是他们的思路和文风有时候真的好飘逸。
其次是Roelant的网站:
里边的干货也很多,当然某些细节对大家的英语也是个挑战。他的博客里有好多细节的实现,其次他也有自己的开源项目可以作为不错的参考。
最后,也可以参考我正在翻译的DV规范:
https://github.com/microsoftbi/DWH-Standard-code-69/blob/master/DV2ModelingSpeci.md
这里面我按照英文-中文对照的方式,根据自己掌握的知识和理解去进行本地化的翻译。
进度很慢,但是如果你想要知道个大概的话那么看我中文翻译出来的部分基本就够了。
结合Data Vault我也自己编写了一个数据仓库的各方面标准:
https://github.com/microsoftbi/DWH-Standard-code-69/wiki/Data-Warehouse-standard--Code-Branch-69
Code name 69,我会不断加入更多项目的实施细节进去。
当然实际项目中会有很多实现的分支,比如对数据的变更处理,有SCD2等很多方法,在我的这个规范里就是insert only。
当然没有一个方法能适用所有场景,这个69规范也不见得就是最专业的,如果你的项目是start from zero的话,那么或许可以拿来做一个参考然后制作出自己的项目规范。
利用Data vault对数据仓库建模的更多相关文章
- 利用Data Vault对数据仓库进行建模(二)
写在前面 本篇先不讨论Data Vault其本身,因为不见得所有人都接受这个.但是里边有一些很不错的东西跟主流的数据仓库方法是有共同点的,所以这里主要讨论这些共同的方法,在笔者看来,无论是Kimbal ...
- Data Vault玩转数据仓库(三)
在Data Vault 2.0版本里,其不只是针对数据仓库的建模,同时也包含了架构,方法论以及实现.这篇挑几个概念,附上我个人对其的理解.同时也把这个系列的名字改成<Data Vault玩转数据 ...
- 数据仓库之Data Vault模型总结
一,Data Vault模型有几个主要的组件,这里先总结一下: 1.Hub组件,是一个数据表,用于记录在业务应用中常用到的业务实体键值,如员工ID,发票号.客户编号.车辆号等. 表内包括几个关键字段: ...
- Data Vault 简介
Data Vault 简介 Data Vault 2.0 不仅是建模技术,也提供了一整套数据仓库项目的方法论.它能提供一套非常可行的方案来满足数据仓库项目中对于历史轨迹和审核两个方面的需求. 多年来, ...
- 大数据之路week07--day05 (一个基于Hadoop的数据仓库建模工具之一 HIve)
什么是Hive? 我来一个短而精悍的总结(面试常问) 1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark). 2:hive可以使用类sql方言,对存储在hdfs上的数据进 ...
- 场景4 Data Warehouse Management 数据仓库
场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...
- 《BI那点儿事》数据仓库建模:星型模式、雪片模式
数据仓库建模 — 星型模式Example of Star Schema 数据仓库建模 — 雪片模式Example of Snowflake Schema 节省存储空间 一定程度上的范式 星形 vs.雪 ...
- Cross-Domain Security For Data Vault
Cross-domain security for data vault is described. At least one database is accessible from a plural ...
- 数据仓库建模与ETL实践技巧
数据分析系统的总体架构分为四个部分 —— 源系统.数据仓库.多维数据库.客户端(图一:pic1.bmp) 其中,数据仓库(DW)起到了数据大集中的作用.通过数据抽取,把数据从源系统源源不断地抽取出来, ...
随机推荐
- matlab批量处理数据的方法
问题描述: 有多个.mat格式数据(本文数据名称:‘buf_026.mat’),要抽取其中的数据进行运算,结果返回到数组/xlsx等 关键字:num2str/ xlsxwrite/ eval/ 元胞数 ...
- MFC 添加C++类,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数;
MFC 添加C++类,不用定义C++类的对象,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数: 1先在mfc程序中添加普通类CProdata,然后删除头文件Prodata.h里面 ...
- Oracle安装完成后修改服务器机器名,Oracle部分服务无法启动
Oracle安装完成后修改服务器机器名,Windows server 2012 R2系统提示Oracle 11g下面3个服务无法启动: OracleDBConsoleorcl OracleOraDb1 ...
- elasticsearch7.6 安装 并且开启外网访问,真的好累。
下载 下载页面 https://www.elastic.co/cn/downloads/elasticsearch wget https://artifacts.elastic.co/download ...
- Tornado之异步非阻塞
同步模式:同步模式下,只有处理完前一个任务下一个才会执行 class MainHandler(tornado.web.RequestHandler): def get(self): time.slee ...
- 【Oracle】如何让一个用户能够访问另外一个用户下所有的表
根据需求的不同,也分为好几种方法,且看下文. 先构造基本的环境:创建两个用户AA,BB,基本需求为用户AA能够访问用户BB下所有的表,即用户AA有对BB下所有的表有"select on&qu ...
- SqlLite用SQLiteTransaction快速导入数据
mysql与sql server都有整表导入的类库,但是查遍了资料发现sqlLite没有,除非自己去写个,发现用SQLiteTransaction导入数据也很快,附上代码 /// <summar ...
- System.Timers.Timer(定时器)
1.System.Timers命名空间下的Timer类.System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法 ...
- TP5中的缓存使用
Thinkphp 5.0采用了 think\Cache 类来提供缓存支持 缓存支持采用驱动方式,所以缓存在使用之前,需要进行连接操作,也就是缓存初始化操作. 支持的缓存类型包括file.memcach ...
- Java String:字符串常量池(转)
作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么? 字符串常量池的设计思想是什么? 字符串常量池在哪里? 如何操作字符串常量 ...