维度设计
维度整合
数仓优化经常通过维度的整合和拆分
步骤:确定粒度,选择维度,确定主维度,确定相关维度,确定维度属性
水平整合:数据源来自不同数据集。比如不同的部门的不同数据集,但是都会有商品价格,标题等可以整合的属性
垂直整合:相同数据集,可以根据来源表产出新旧,频率,热度等
历史归档
缓慢渐变维度处理
1 装载:阿里主要采用最简单粗暴的1天粒度的全量快照存储,不采用代理键。
2 对数据的清理要求较高,磁盘代价小于CPU/内存,采用极限存储
历史拉链存储(记录进货/出货等生命周期,保留历史变更状态)
新增start_date/end_date时间戳,记录天粒度的变更数据
历史拉链表采用月份分区
微型维度
避免维度过长,对于频繁变动维度可以单独新维度表拆除,加入代理键
额外维度
递归层次:
例如一个表包含id,父类id和数值,统计根id汇总的信息。
可以采用结构扁平化,一张表包含所有id层级的列,但是可扩展性太差
优化:使用层次桥接表,专门一张表记录id,根id,id和根id层级间隔数
多值维度三种处理方式
1 降低事实表粒度
2 多字段:如事实表由买方字段改成买方一,买方二,买方三,其他买方
3 桥接表
多值属性
杂项维度
行为维度
事实表设计
三大类
1 事务事实表
单事务
多事务:一个事实表包含多个业务过程。
淘宝交易事务事实表 中同时包含了下单、支付和成功完结三个业务过程,
这三个业务过程拥有相同的粒度,都是子订单粒度,也比较适合放到同一个事实表中
然后关联添加杂项维度(是否当天下单/支付/成功完结)来区分三个业务/或者表中添加度量字段区分
2 周期快照事实表
1 基于事务事实表汇总产出
2 直接使用操作型系统的数据作为周期快照事实表的数据源进行加工
3 积累快照事实表
4 无事实的事实表
5 聚集型事实表
确定聚集维度(根据什么维度汇总),确定一致性上钻(根据按天/月/商品/类目等如何汇总),确定聚集事实
8个原则,设计方法5步骤
模型好坏判断