目录:
一、事实表介绍
二、事实表建模步骤
三、真实企业案例(社招案例)
四、相关面试题
一、事实表介绍
明细粒度事实层:是以业务过程来作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表(注意是最细粒度)。需要结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
事实表类型:事务事实表,周期快照事实表和累计快照事实表
事务事实表:
事务事实表描述业务过程事务层面的事实,每条记录代表一个事务事件,保留事务事件活动的原始内容。事务事实表中的数据在事务事件发生后记录,一般记录后数据就不再进行更改,其更新方式为增量更新。事务事实表相对其他事实表保存的数据粒度更细,可以通过事务事实表对事务行为进行详细分析。
使用场景:大部分描述性的事实表都适用
eg:用户事实表,用户每注册一位,就会多一条信息
周期快照事实表:
周期快照事实表以具有规律性、可预见的时间间隔产生快照来记录事实,每行代表某个时间周期的一条记录,记录的事实是时间周期内的聚集事实值或状态度量。周期快照事实表的内容一般在所表达的时间周期结束后才会产生,一般记录后数据就不再更改,其更新方式为增量更新。周期快照事实表一般是建立在事务事实表之上的聚集,维度比事务事实表少,粒度比事务事实表粗,但是由于对事实进行了多种形式的加工从而产生了新的事实,故一般事实会比事务事实表多。
使用场景:适用一个业务线的整体链路的时间变化
eg:招聘行业,b端企业会充值购买招聘服务,企业历史累计充值,累计消费,今年的充值总额,消费总额
累计快照事实表:
累积快照事实表覆盖一个事务从开始到结束之间所有的关键事件,覆盖事务的整个生命周期,通常具有多个日期字段来记录关键事件时间点。周期快速事实表涉及的多个事件中任意一个的产生都要做记录,由于周期快照事实表涉及的多个事件的首次加载和后续更新时间是不确定的,因此在首次加载后允许对记录进行更新,一般采用全量刷新的方式更新。
使用场景:适用一个业务线的整体链路的时间变化
eg:社招中招聘流程,投递->反馈->邀请面试
二、事实表建模步骤
1、选择业务过程
在明确需求的前提下,就要进行详细的需求分析,对业务的整个生命周期进行分析,明确关键的业务步骤,从而选择与需求有关的业务过程
在选择了业务过程后,相应的事实表类型也随之确定了。
2、声明粒度
粒度的声明是事实表建模非常重要的一步,意味着精确定义事实表的每一行所表示的业务含义,粒度传递的是与事实表度量有关的细节层次。
注意应该尽量选择最细级别的原子粒度,以确保事实表的应用具有最大的灵活性。
3、确认维度
完成粒度声明后,也就确定了主键,对应的维度组合以及相关的维度字段就可以确定了,应该选择能够描述清楚业务过程所处的环境的维度信息。
4、确认事实
就是确认事实表的每张事实表的度量值。
三、真实企业案例(社招案例)
业务场景:某公司进行社交招聘业务,业务就是企业有招聘的需求,会发布职位信息,用户有求职的需求,会对职位进行投递。
这里以投递事实表为例来设计。投递事实表,最细粒度为投递信息,一个用户对应一个职位为一条数据。
确认维度和度量
确定好这些后,就是剩下开发了。
注意:设计事实表的时候,要根据本身业务来看,例如:用户事实表,这个表里面会涉及到用户所有的属性,如果更新频繁,设计复杂可以当成事实表来用,相对简单可以当成维度表来用。
四、相关面试题
1、你们公司有哪些事实表,是怎么设计的?
1)、从dwd的主题划分说起,按着自己的业务流程,介绍dwd的主题
2)、介绍自己涉及到了哪些主题的开发
3)、再细说事实表设计流程
2、事实表有哪些类型,他们的使用场景是什么?
结合自己的业务,介绍不同类型,自己公司有哪些表,为了实现什么样的需求而选择这个类型。