数据仓库搭建流程及数据模型 - 南北极星

jcliaoyb 2021-10-09 原文

根据业务部门进行划分,理清部门之间的关系,然后将各个部门的具体业务程序化,与业务部门开会协商出需求的指标、保存年限、维度等等。总体来讲,就是要知道他们需要哪些指标以及他们能提供哪些数据。业务建模的时间最长,而且与公司实际的业务环境息息相关,因此在这里需要根据实际生产环境和业务需求确认好数据仓库使用的工具和平台。

将业务模型抽象化,分组合并类似的概念,细化概念,抽象出实体与实体之间的联系,理清各组概念之间的联系。说白了就是画图,把指标需要的哪些数据封装到一个实体里,实体与实体之间的关联等等用ER图表示出来。先画出局部ER图,最后再综合画出全局ER图。

将概念模型实体化,具体考虑概念对应的属性,事件考虑事实属性,维度考虑维度属性。总体来说就是建表,前面已经画出了关系图,这里只要将表里头有哪些字段考虑出来就可以,如果是事实表就考虑事实字段和业务主键,如果是维度表就考虑维度属性,SCD策略等等。在这里需要确定数据粒度,如果多个指标都用到一个字段,则取粒度最小的指标。如果不确定指标的量度,则取毫秒级作为粒度。

物理建模

综合现实的大数据平台、采集工具、etl工具、数仓组件、性能要求、管理要求等多方面因素,设计出具体的项目代码,完成数仓的搭建。

数仓(具体说是dwd层)中只有一张包含历史数据且不冗余的事实表和一组附属维度表,每个维度一张。事实表与维度表之间通过外键和主键关联。星型模型的维度表可能存在冗余,因此是反三范式的,这种模型在数据维护上较麻烦,但是性能更高,业界普遍使用星型模型。星型模型的难点在于拉链表的维护,拉链表一般不能有冗余。

针对星型模型的维度表进行扩展的模型,将维度表拆解成维度表+说明表,说明表又可以进一步拆分,最终形成事实表-维度表-说明表的多次连接。雪花模型的表一般遵循三范式,在数据的维护上会很方便,但是多表join影响性能。

多个事实表采用星型模型共享维度表,就形成了一个星系。

Data Vault模型

从上述模型中我们不难看出,如果解决了拉链表的维护问题,星型模型的缺陷就已经可以忽略。Data Vault模型由中心表、链接表、附属表、PIT表组成,这里的中心表,事实上就是维度表,链接表就是事实表、附属表是拉链表。Data Vault模型就是通过将拉链表从维度表中分离出来,来达到方便维护的目的。首先,中心表是一组业务生命周期内绝不会变的维度表,打个比方就是java里头的常量,常量再怎么冗余也不会有影响。链接表则是保存流水类数据的事实表,它通过外键与多张中心表连接,但不会连接附属表。附属表则是从维度表中抽出来的可能会发生变化的字段或表,这一部分就采用拉链表的方式创建,中心表则通过外键关联附属表的主键。

从同一维度表拆出来的字段根据变化维度不同可能还要分成多表存储,为了避免时效不一致,所以还会建立一张PIT表,用于维护附属表的变化历史。中心表通过外键与PIT表相连,而PIT表则为每个附属表的主键都准备了一个时间字段保存数据的更新时间。

 

发表于
2020-04-26 22:56 
南北极星 
阅读(2286
评论(0
编辑 
收藏 
举报

 

版权声明:本文为jcliaoyb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jcliaoyb/p/12783080.html

数据仓库搭建流程及数据模型 - 南北极星的更多相关文章

  1. Python题目:通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字符串 – 夏夏夏天的西瓜

    Python题目:通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字符串 # 方法一:# st […]...

  2. 哈夫曼树及哈夫曼编码 – kexinxin

    哈夫曼树及哈夫曼编码 哈夫曼树及哈夫曼编码 哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径 […]...

  3. 虚拟机安装中标麒麟桌面版7.0系统 + 升级Firefox浏览器

    背景 由于公司业务(政府项目)需要走国产化路线,需要把原来已有的产品在国产的系统进行测试。目前选择的是中标麒麟 […]...

  4. ubuntu命令行连接wifi – PartMan

    ubuntu命令行连接wifi 转载:https://www.cnblogs.com/roybi/p/5656 […]...

  5. Java实现的5大排序算法 – 王囧草

    Java实现的5大排序算法 Java实现的5大排序算法 排序算法很多地方都会用到,近期又重新看了一遍算法,并自 […]...

  6. 二极管的微变等效电路及稳压二极管 – 半截蜡笔情

    二极管的微变等效电路及稳压二极管 折线化伏安特性              二极管的微变等效电路       […]...

  7. 以管理员身份运行 – 只想愛你

    以管理员身份运行 using System; using System.Diagnostics; using  […]...

  8. # 大项目之网上书城(四)——主页(下中)

    今天完成了昨天计划的任务的准备工作的一部分,以及更早的一些思路,以及为以后筹划的一些思路。 具体点说,今天完成 […]...

随机推荐

  1. 阿里云服务器ECS相关配置免费教程

    服务器配置,以阿里云ECS服务器为例 1.在阿里云控制台,云服务器ECS,实例,点击最右侧更多→实力状态→停止 […]...

  2. Hadoop – YARN Introduce

    YARN Introduce 1. MapReduce1.0缺陷 (1)存在单点故障 (2)JobTracke […]...

  3. 自学 JAVA 的几点建议

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 许久不见,最近公众号多了 […]...

  4. docker使用笔记

    本文用到的符号说明: <container> 容器名,形如 tiangolo/nginx-rtmp […]...

  5. 我的第一个python web开发框架(19)——产品发布相关事项

      好不容易小白将系统开发完成,对于发布到服务器端并没有什么经验,于是在下班后又找到老菜。   小白:老大,不 […]...

  6. 你知道并发用户数应该怎么算吗?

    什么是并发  并发数是 16TPS,就是 1 秒内整个系统处理了 16 个事务。 在线用户数、并发用户数怎么计 […]...

  7. 基于vue框架手写一个notify插件,实现通知功能

    简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根 […]...

  8. 有道云笔记 同步到我的博客园

    今天折腾了一天 搞了一个winform程序来把我有道云的笔记 同步到我的博客园里面去。 界面很简单 如下 第一 […]...

展开目录

目录导航