说下自己的理解:
数据仓库是分层的,通常情况下都是进行三层建模(当然也不是绝对的)。
例如上次说的商品订单数据表,表字段可能有非常多个,但是我们使用的时候可能只用到UID,PayTime,CreateTime, PayMoney,等字段。这个过程需要不断的过滤。每过滤一层就需要在新的一层储存一次。类比在Hive中有个表分区的概念,把一张大表按照业务需求拆分为两张表,减少了扫描的量级。
下面说下常用的分层类型:
业务数据层:包含 STG(数据缓冲层)与 ODS(操作数据层)两层,这两层数据结构与业务数据几乎一致。
STG:也叫数据准备区,定位是缓存来自 DB 抽取、消息、日志解析落地的临时数据,结构与业务系统保持一致;负责对垃圾数据、不规范数据进行清洗转换;该层只为 ODS 层服务;
ODS:操作数据层定位于业务明细数据保留区,负责保留数据接入时点后历史变更数据,数据原则上全量保留。模型设计依据业务表数据变更特性采取拉链、流水表两种形式。(据我所知通常在大数据环境下,通常采取快照的形式,拉链表不好维度后期)
公共数据层:细分为 DWD(明细数据层)、DWS(汇总数据层)、DIM(公共维度层) 三层,主要用于加工存放整合后的明细业务过程数据,以及经过轻度或重度汇总粒度公共维度指标数据。公共数据层作为仓库核心层,定位于业务视角,提炼出对数据仓库具有共性的数据访问、统计需求,从而构建面向支持应用、提供共享数据访问服务的公共数据。
DWD:这一层是整合后的业务过程明细数据,负责各业务场景垂直与水平数据整合、常用公共维度冗余加工,以及明细业务