文章开头介绍下,这篇文章的第一部分Q&A环节,主要来源于日常工作沉淀,于是决定抽空写篇原创博文来做技术分享,有技术问题均可在大数据阶梯之路技术交流群互相讨论,加我微信拉你进群。公众号持续加成输出大数据开发相关技能点,可以关注公众号《大数据阶梯之路》一同成长,另外公众号内整理了众多大数据相关资料,关注公众号《大数据阶梯之路》后 找小编获取学习文档保存本地吧,学习和复习都是绝佳。
关注+点赞+在看+转发 是我创作的动力。

文末附万字长文完整版【数据仓库指北】原创PDF文档获取。

通过大纲对本文内容进行概览,你能通过文章学到什么:
1. 数据仓库的基础必备问题
2. 数据仓库的几种数据表
3. 数据仓库分层设计及各层作用
4. 数据仓库几种数据模型
5. 维度建模

一、 灵魂十二问

Q1:大数据的数据来源?

埋点上报数据:如页面浏览、点击、评论等,主要体现在埋点事件的设计,区分出公共字段和业务埋点事件参数,埋点事件的设计好坏程度直接会影响数据仓库流量域的建设,埋点数据时常可以用来分析用户行为
业务数据库数据:如订单、商品等业务过程的数据,主要体现在业务的数据库中
日志数据:如上报的性能日志等,主要体现在服务器日志文件中,通过采集解析的方式拉取

Q2:数据集市?

数据集市可以理解为是一个微型的数据仓库,具有更少的主题域,服务对象更小,可以是部门级别,而数据仓库则是服务于企业级别。数据仓库可以统一规划数据,避免数据孤岛。

Q3:为什么做数据分层设计?

大数据处理时,作为数据开发者,我们总会进行各种表关联或者表依赖,如果没有很好地规划表依赖,则会造成我们的数据表关系混乱复杂,不方便我们看清数据的整体生命周期及数据流向,甚至出现循环依赖的数据体系,于是数据分层就很有必要,可以直观看清数据流向,建造更加良好的数据体系。

Q4:数据分层的好处?

  • 1、清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
  • 2、减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
  • 3、统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
  • 4、复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题

Q5:数据仓库起到什么作用?

数据仓库,简称DW,是各源系统数据及日志数据的汇总落地处,为企业决策做制定过程,为产品业务改进做支撑,控制成本和提高产品质量,而数据仓库也不是数据的最终目的地,而是为数据最终目的地做准备,比如清洗、转义、分类、重组、合并、拆分、统计,数据要体现出价值,最终目的地则是为各类大数据应用系统服务,常用的有BI报表系统、用户画像、推荐系统、风控系统。

Q6:OLAP和OLTP的区别?

OLAP(On-Line Analytical Processing),即联机分析处理,主要应用在数据仓库,主要使用对象是决策者,对响应速度要求不高,强调多维分析能力,保留历史数据,数据大小一般是TB或PB级别。
OLTP(On-Line Transaction Processing),即联机事务处理,主要应用在数据库,主要使用对象是开发人员,对实时性要求高,保留数据最新状态,数据大小一般是GB级别。

Q7:什么是维度?

维就可以相当于角度,简单理解,按什么维度看数据就是你想从什么角度分析数据。

Q8:SCD缓慢变化维?

指的是数据仓库维度表中,那些随着时间会缓慢发生变化的维度,但是变化又不明显,即维度值变化不频繁的维度。
比如:员工表中,员工的岗位和工作地点 在特殊场景分析时就可以看成是缓慢变化维,因为存在升职和调岗行为。
分析下岗位为什么我说可以看成缓慢变化维,即入职那会是数仓开发工程师,几年后升职为数仓负责人;再分析下工作地点为什么我说可以看成缓慢变化维,即入职那会是在上海,几年后调岗到北京。

Q9:历史拉链表

是一种既能反应数据的历史变更状态,又能更大程度的节省数据存储的一种数据模型表。常用于表内属性状态经常会变更,比如订单表中的同个订单在每天都会有不同的订单状态(例如:今天下单创建,明天开始搬运,后天才更新订单完成),这是hive里比较常见的处理SCD缓慢变化维场景的一种技术。(PS:由于篇幅问题,这次不在这里详述,下次有空我再安排一篇文章细讲缓慢变化维和拉链表设计实现)

Q10:什么是次留用户,7日留存?

次留用户指的是统计当天的用户仍是昨天的那个用户,7日留存用户指的就是统计当天活跃的用户是在7天前同样活跃的用户。

Q11:上卷和下钻?

钻相对于维来说的话,就是可以改变维的层次,变换分析的粒度。向上钻取就是上卷,向下钻取就是下钻。

比如:把业务的内购流水按照时间维度进行向上聚集汇总数据,从而计算出天内购流水和月内购流水;把业务的内购流水沿着时间维向下细探到每个用户产生的明细流水数据,这就叫做下钻。

Q12:自然键和代理键?

搞清楚一个问题,在数据层面,键一般是用来唯一标识一个实体的所有属性。
自然键一般是已经存在的数据,字段本身含有一定的业务意义,例如:身份证号
代理键一般是无实际业务意义的数据,只具有主键作用,例如:自增ID
在ETL过程中,数据仓库中商品维表中的商品ID可能是自然键,而可以生成一个唯一标识的键作为代理键,而在前台业务系统中,商品ID倒是作为代理键来着。
使用代理键的优点:
①能够对集成多个操作型系统的数据进行整合时起到缓冲作用,因为不同业务系统的同主题下可能会出现唯一标识重复,就需要有一个代理键来进行整合唯一标识;
②代理键是整型的,减少了事实表中记录的长度,同样的IO可以读取更多的事实表记录,整型字段做外键关联效率也高,提升性能;
③使用代理键可用来处理缓慢变化维的情况,例如拉链表。
使用代理键的缺点:是使用代理键会增加ETL的复杂性,开发和维护成本高。

二、数据仓库的层级划分规范

表命名通用规范:层级前缀_主题域_表内容_周期_增量/全量表

DWD层:该层的粒度一般保持和ods层一样,不过有时为了数据开发时易用性,会退化一些维度进入事实表,减少事实表和维表的关联提高性能。通常是解析ods层日志数据或者对ods层业务数据进行维度建模,提升数据质量和规范化数据,做一些数据清洗的工作,比如去噪或去异常值。
DWB层:主要作用有2种:①对dwd层的数据按照维度进行收敛,做明细数据轻度聚合,出现一些业务统计原子指标。②把各个业务相关的可归为同主题的dwd表关联一起组成宽表获取更丰富的字段信息,使用宽表模型,做明细数据横向整合。
DWS层:在这层的数据表会比较少,根据业务线划分生成字段较多的宽表,比如充值统计、活跃统计,一般是多天累计的分区表,出现一些比如近30天的充值次数啊等指标。这层重点在于提高数据易用性,起数据开发优化作用。

三、数据仓库的一些数据表种类

1. 宽表

顾名思义是字段比较多的数据库大表,通常是把同个业务主题域的相关维度、指标、属性都关联放在同一张表,由于把不同内容都放在一张表这本身就已经破坏了表的设计范式,所以宽表会造成大量数据冗余,但查询性能和效率就会提高和便捷,相当于以空间换时间,宽表设计场景可在数据挖掘模型训练前的数据准备,减少表关联取数数量

2. 窄表

严格按照数据设计三范式,尽量减少数据冗余,缺点是修改一个数据可能要经常切换修改与之关联的表对应数据

3. 维度表

维度表是存放着维度属性的集合,维度数据固定或者变化缓慢,且数据量不大,把维度看成是分析数据的角度,就是按什么角度来分析数据

4. 事实表

事实表是数据仓库结构中的中央表,按维度表分析事实的详细数据,事实表中每行记录代表着一个业务过程事件,每行记录一般包含着:具备可累计的度量值+与维表关联的外键。
事实表有三类:

  • 事务型事实表事务一旦被提交,事实表数据被插入了,数据就不再变更,采用增量同步策略,即以每个事务或事件为单位。比如:订单支付事实表,一笔订单支付记录作为事实表里的一条数据,类似于日志流水记录。
  • 周期性快照事实表不会保留全部数据,仅保留固定时间周期内数据,比如:每月的账户余额,即账户余额每天都在变化,但我更关心的是我每月最后的账单余额。
  • 累积型快照事实表主要用于跟踪业务事实的变化,采用新增更新同步策略,比如:数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单整个生命周期的进展情况。

四、几种常见数据模型

1. 星型模型

是数据集市维度建模中的推荐方法,星型模型以事实表为中心,所有的维度表都直接连接在事实表上,像星星一样,按维度进行汇总,所以执行效率会比较高些。即由一张事实表和多张维度表组成,事实表里包括各维度表的各个主键ID,以及其它没有放进维度表的内容,维度表里存储对应维度的详细信息。星型模型的领域主要适用于数据集市,它的最大作用其实是为了解决数据仓库建模中的性能问题(join少则shuffle就少,性能就越好)

2. 雪花模型

在星型模型中,维度表包括了该维度的所有信息,因为没有分层,所以维度表里面可能会有冗余出现,雪花模型正是为了减少维度表的冗余,雪花模型的维度表是可以拥有连接其他维度表的,雪花模型在星型模型的基础上,把维度表中的一些字段进行进一步的拆分出维度表,减少冗余,使其更有层次。不过雪花模型的性能相比于星型模型低,但相对较灵活些。

3. 星座模型

星型模型的扩展,只不过星座模型是可以基于多张事实表的,可共享维度信息。可以看作是多个事实表版本的星型模型,它的一个特点是多张事实表共用模型中的维度表,适用于比星型模型和雪花模型更复杂的场合。数据仓库大多是这类模型,即数据集市建模采用星型模型,然后各数据集市组成一个完整的数据仓库则演变成星座模型。

总结

星型模型适合用于指标分析,比较关注事实表里的内容;
雪花模型适合用于维度分析,相比于星型模型来设计的话,基于维度分析的场景数据冗余浪费情况较好。

五、数据仓库建模

维度建模

维度建模四步走如下 (PS:按流程走,四步是从上往下,环环相扣的)

1、选择业务过程
此过程是基于业务需求以及日后的易扩展性考虑的,即开始数仓建模时按业务区分选择数据。

2、声明粒度
存在一对一关系的就是相同粒度,粒度可以理解为层级,比如一个公司有多个部门,一个部门有多个员工,而这里面的不同部门就是相同粒度,不同员工也是相同粒度。维度建模时在同一事实表中必须具有相同的粒度,不同粒度最好建立不同的事实表,从业务获取数据时最好是从最细粒度开始,即原子粒度。
3、确认维度
维度就是分析数据的角度,是数仓的“灵魂”,数仓工具箱告诉我们牢牢掌握事实表的粒度,就可以区分出维度,维度表必须保证不出现重复数据,即维度唯一。
4、确认事实
事实表是用来度量的,基本是一些计数值,维度建模核心原则之一是同一事实表中的所有度量都必须具备相同的粒度,才能确保不出现重复计算度量的问题。

范式建模

主要应用于数据库设计,通过三范式对表进行设计,避免数据冗余。

关系建模

严格遵守三范式对表进行设计,避免数据冗余和保持数据一致性,关系建模和维度建模在表关系依赖方面基本相似,维度建模一般只依赖一层表关系,关系建模就会层层表依赖,关系表比较多,关系复杂些。

六、如何获取完整版PDF

① 请关注公众号【大数据阶梯之路】,看原推文

数据仓库指北(文末附PDF下载)相关推荐

  1. 大数据治理平台建设方案(文末附PDF下载)

    这份材料我给满分!分享一份非常好的大数据治理平台解决方案材料,这份PPT将理论与实践相结合,值得仔细阅读,建议收藏. 文档目录主要包含了以下几点: 数据治理概述 某行数据现状及问题 数据治理阶段目标 ...

  2. 数据化建设知识图谱(文末附PDF下载)

    一.前言导读 如今,国家大力倡导数字化,随之而来的各种数据概念也铺天盖地,数字化转型.数据中台.智慧XXX...... 面对这些高举的概念,身为IT工程师和数据建设者该如何着手,想必都有不少困惑和苦水 ...

  3. 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...

  4. 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)

    点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...

  5. 牛逼!知道这100 个网络基础知识,成了半个网络高手!(文末附PDF版本)

    来源:CU技术社区 为了方便大家更好着按需查找对应知识点,还给大家整理成了带有高清目录的 PDF 哦,获取方式见文末 100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设 ...

  6. 陆奇最新分享:数字化进程加速,创新者如何把握机会?(文末附PPT下载链接)...

    4月8日,腾讯产业加速器学员社群"毕加所"举行线上发布会,邀请到陆奇博士一同见证发布时刻.从硅谷顶级科技公司高管转型企业孵化领域的创业者,奇绩创坛(原YC中国)创始人兼CEO陆奇为 ...

  7. 大学“电路分析基础”试题合集第六章(文末附PDF文档与Word文档)

    大学"电路分析基础"试题合集第一章 大学"电路分析基础"试题合集第二章 大学"电路分析基础"试题合集第三章 大学"电路分析基础&q ...

  8. hfss matlab联合仿真_一文搞定matlab 与 STK 联合调试仿真环境配置(文末附软件下载链接)...

    最近在做导师给的课题:卫星星座的快速优化设计. 需要用到matlab 和 STK 来进行联合调试仿真,但是这第一步的环境配置就让我头疼了几天.在好几次重装,失败和查找资料之后,我终于成功实现了matl ...

  9. Embedding技术在房产推荐中的应用(文末附PPT下载链接)

    分享嘉宾:周彤 58同城 资深算法工程师 编辑整理:吴雪松 内容来源:58推荐系统技术沙龙 出品平台:DataFunTalk 导读:在深度学习的应用过程中,Embedding 这样一种将离散变量转变为 ...

最新文章

  1. 删除时存在依赖_从一次线上故障来看redis删除机制
  2. c#FileStream文件读写(转)
  3. artTemplate的使用总结
  4. 上传图片文件(支持远程存储)
  5. 批处理定时mysql备份数据库_定时备份mysql数据库的批处理
  6. sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数
  7. (进阶篇_01)Oracle数据同步3种场景
  8. oracle实例与数据库
  9. oracle中md5加密解密_Oracle定义DES加密解密及MD5加密函数示例
  10. 如何在水晶报表9中实现选择打印机打印?
  11. 字长越长计算机的计算速度也越快,计算机字长越长运算速度越慢吗
  12. 【Unity游戏开发】Unity基础(一)面板介绍
  13. 图像处理之超像素分割(SLIC)
  14. 会php学java入门要多久_php自学需要多久
  15. 编译原理 LL1文法的判断和句子识别
  16. Linux下文件备份和同步的工具软件
  17. app中我的页面头像及背景效果实现
  18. TEC1401.Report开发技术总结 - 第九章 使用BI Publisher开发报表-使用BI Publisher创建RTF模板的语法(4/5)
  19. 星星之火-42:LTE空口协议栈、数据处理流程与LTE的调制技术大全
  20. IntelliJ IDEA剪切复制快捷键 失效解决方案

热门文章

  1. 2023年春招热门笔试算法题(C++)
  2. linux网卡驱动内核文件目录,LINUX内核升级更新网卡驱动
  3. 关于思科无线网络无法连接解决
  4. android华为隐藏底部虚拟按键,沉浸式状态栏/华为虚拟按键隐藏
  5. 某购物网站推荐系统实现 | 数据库、推荐算法
  6. 计算机网络术语sonet,计算机网络(第七版)谢希仁-第2章 物理层(示例代码)
  7. R语言图像处理EBImage包详解
  8. 《迅雷链精品课》第三课:区块链主流框架分析
  9. 作者:吴力波(1974-),女,复旦大学大数据学院教授、副院长、博士生导师...
  10. 超融合服务器硬盘4T 6T 8T从性能上到底有什么区别