数据仓库指北

一、 Q&A

Q1:什么是维度?
维就可以相当于角度,当说按什么维度看数据就是你想从什么角度分析数据。
Q2:什么是次留用户,7日留存?
次留用户指的是统计当天的用户仍是昨天的那个用户,7日留存用户指的就是统计当天活跃的用户是在7天前同样活跃的用户。
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:历史拉链表
是一种既能反应数据的历史变更状态,又能更大程度的节省数据存储的一种数据模型表。常用于表内属性状态经常会变更,比如订单表中的同个订单在每天都会有不同的订单状态(例如:今天创建,明天下单,后天发货)
下文有这种数据模型表的刷新思路方法。
Q9:数据集市?
数据集市可以理解为是一个微型的数据仓库,具有更少的主题域,服务对象更小,可以是部门级别,而数据仓库则是服务于企业级别。数据仓库可以统一规划数据,避免数据孤岛。
Q10:上卷和下钻?
钻相对于维来说的话,就是可以改变维的层次,变换分析的粒度。向上钻取就是上卷,向下钻取就是下钻。
例如:把快游戏业务的内购流水按照时间维度进行向上聚集汇总数据,从而计算出天内购流水和月内购流水;把快游戏业务的内购流水沿着时间维向下细探到每个用户产生的明细流水数据,这就叫做下钻。
Q11:自然键和代理键?
搞清楚一个问题,在数据层面,键一般是用来唯一标识一个实体的所有属性。
自然键一般是已经存在的数据,字段本身含有一定的业务意义,例如:身份证号
代理键一般是无实际业务意义的数据,只具有主键作用,例如:自增ID
在ETL过程中,数据仓库中商品维表中的商品ID可能是自然键,而可以生成一个唯一标识的键作为代理键,而在前台业务系统中,商品ID倒是作为代理键来着。
使用代理键的优缺点:优点①能够对集成多个操作型系统的数据进行整合时起到缓冲作用,因为不同业务系统的同主题下可能会出现唯一标识重复,就需要有一个代理键来进行整合唯一标识;②代理键是整型的,减少了事实表中记录的长度,同样的IO可以读取更多的事实表记录,整型字段做外键关联效率也高,提升性能;③使用代理键可用来处理缓慢变化维的情况,例如拉链表。缺点是使用代理键会增加ETL的复杂性,开发和维护成本高。

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

  • 宽表
    顾名思义是字段比较多的数据库大表,通常是把同个业务主题域的相关维度、指标、属性都关联放在同一张表,由于把不同内容都放在一张表这本身就已经破坏了表的设计范式,所以宽表会造成大量数据冗余,但查询性能和效率就会提高和便捷,相当于以空间换时间,宽表设计场景可在数据挖掘模型训练前的数据准备,减少表关联取数数量
  • 窄表
    严格按照数据设计三范式,尽量减少数据冗余,缺点是修改一个数据可能要经常切换修改与之关联的表对应数据
  • 维度表
    维度表是存放着维度属性的集合,维度数据固定且数据量不大,可以把维度看成是分析数据的角度,就是按什么角度来分析数据
  • 事实表
    事实表是数据仓库结构中的中央表,按维度表分析事实的详细数据,在事实表中的度量值有2种,一种是可以累计的度量值(比如:用户明细记录可计算用户pv指标),另一种是非累计的度量值(这种汇总出来结果一般没意义,但求其他指标比如平均值就有意义这样)
    事实表有三类:①事务型事实表,保留全部数据,采用增量同步策略,即每个分区来存储增量数据;
    ②周期性快照事实表,不会保留全部数据,仅保留固定时间周期内数据,采用全量同步策略,即每个分区即最新全部数据;
    ③累积型快照事实表,主要用于更新业务事实的变化,采用新增更新同步策略。

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

数仓分层设计.jpg

表命名通用规范:层级前缀_主题域_表内容

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

四、几种常见数据模型

  • 星型模型
    是数据集市维度建模中的推荐方法,星型模型以事实表为中心,所有的维度表都直接连接在事实表上,像星星一样,按维度进行汇总,所以执行效率会比较高些。维度建模的领域主要适用于数据集市,它的最大作用其实是为了解决数据仓库建模中的性能问题(join少则shuffle就少,性能就越好),维度建模很难能够提供一个完整地描述真实业务实体之间的复杂关系的抽象方法
    维度建模
  • 雪花模型
    雪花模型的维度表是可以拥有其他维度表的,图示的话就是不用直接连接在事实表上,不过也没有严格遵循三范式,性能比星型模型低,但相对较灵活些
  • 范式模型
    范式模型介于星型模型和雪花模型之间,优点是避免数据冗余
  • 星座模型
    星型模型的扩展,只不过星座模型是可以基于多张事实表的,可共享维度信息。数据仓库大多是这类模型,即数据集市建模采用星型模型,然后各数据集市组成一个完整的数据仓库则演变成星座模型

五、数据仓库建模

数仓构建一般还是采用维度建模的方式。

1、维度建模

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

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

附学习参考文章:https://www.cnblogs.com/itlz/p/14262577.html

2、范式建模

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

3、关系建模

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

七、历史拉链表刷新策略方法

涉及全量初始化、增量抽取进表并刷新历史数据:http://lxw1234.com/archives/2015/08/473.htm
数据仓库之ETL策略:http://lxw1234.com/archives/2015/04/31.htm

八、数据仓库的常见指标计算

留存用户计算:计算思路就是通过取一时间段内的用户进行与统计当天用户关联,如果关联上则表示仍是之前的用户,那个用户即为留存用户。
新增用户计算:前提是拥有一张全量历史表,每天新增的用户往里面刷新,历史的数据也保留着,计算新增用户则把统计最新一天的用户捞出来即可
累计用户计算:同上,前提是拥有一张全量历史表,每天新增的用户往里面刷新,历史的数据也保留着,计算累计用户则把历史全量的用户捞出来

你可能感兴趣的:(数据仓库指北)