数据仓库的分层
整体思路:原始数据→洗干净→按主题整理→按维度汇总→面向业务做宽表
第一层:ODS(贴源层)
全称:Operational Data Store
干什么:将源数据存到数仓里,几乎不改动,最多添加日期分区方便按天查。
什么时候用:数据出了问题想回溯原始记录时。
第二层:DWD(明细层/整合层)
全称:Data Warehouse Detail
干什么:ODS数据做清洗+标准化+主题整合。这是数仓最核心的一层。
具体做了什么事:去重、字段统一、空值处理、多源合并、关联建立
这一层做完的标志:数据干净、编码统一、表与表之间能关联,业务方可以直接用。
第三层:DWS(汇总层)
全称:Data Warehouse Summary
干什么:DWD明细数据按常用维度做轻度聚合。提前算好,报表直接查,不用每次从几亿行明细重算。
什么时候用它:写日报、周报、月度分析时,从DWS取不用写复杂聚合。
第四层:ADS(应用层/数据集市)
全称:Application Data Service
干什么:面向具体业务场景的宽表,直接给报表工具、BI看板、数据接口用。
这一层特点:字段多、表宽、面向特定人群,市场部一张表、财务部一张表,互不干扰。
问题1:为什么不能从ODS直接取数?
答案:脏、乱、格式不统一、多源不关联
问题2:为什么不从DWD直接做报表?
答案:太慢,每次从几亿条明细算
问题3:为什么还要单独做ADS?
答案:DWS是通用的,市场部和财务部需求不同,各做各的ADS互不干扰
补充:什么是宽表?
宽表:把多张表里有关联的字段横向拼成一张大表。本来分散在用户表、订单表、产品表的信息,全部摊在一行里。
eg:假设要分析“张三昨天用手机号13800138000花了多少钱”。
窄表(DWD层的存法,多张表各管各的)
用户表、手机号表、账单表
三张表,查一次问题要JOIN两次
好处:省存储、不改结构。
宽表(ADS层的存法,一张表全有)
一张表,字段横向铺开,查任何东西不用JOIN,直接SELECT...WHERE。
好处:查的快、不用连表——代价是字段多、有冗余(每个字段值在每行都存一遍)。