文章目录
数据分层
数据分层在建设数据仓库中是一个十分重要的环节,良好的数据分层能够使得数据仓库更容易理解和使用,提升数据处理速度,并且能够降低存储压力和企业成本。在数据仓库建设中,数据分层主要分为数据运营层、数据仓库层、数据应用层。
好处
数据分层的好处:
- 清晰数据结构:让每个数据层都有自己的作用和职责,在使用和维护的时候能够更方便和理解
- 复杂问题简化:将一个复杂的任务拆解成多个步骤来分步骤完成,每个层只解决特定的问题
- 统一数据口径:通过数据分层,提供统一的数据出口,统一输出口径
- 减少重复开发:规范数据分层,开发通用的中间层,可以极大地减少重复计算的工作
数据运营层
数据运营层ODS(Operation Data Store) -
也就是最接近数据源的一层,直接对接的数据源(如:业务库、埋点日志、消息队列等)。ODS
数数仓的最底层。
该层是存储数量最大的、未经过太多处理的、最原数据始的一层。该层还起到一个数据备份的作用,比如特殊的行业,一般ODS
层需要存储一年甚至多年,不过普通公司一般存储三个月到六个月。
一般情况下,在数据进入ODS
层的时候,都会对数据做一些最基本的处理。例如:
- 数据来源分区
- 数据按照时间分区存储,一般按照天分区,也有一些公司按照年、月、日三级分区存储
- 进行最基本的数据处理,如格式错误的丢弃、过滤掉关键信息丢失的数据。
注意:一般公司也会把以上的基本处理放到DWM
层来进行。
数据仓库层
DWD(Data WareHouse Detail) -
数据细节层。该层与ODS
层保持相同的数据颗粒度,区别在于,改成主要是对ODS
层进行数据的清洗和规范化操作,比如说去除空数据、脏数据等。该层由于对数据处理的粒度比较细,一般情况下都是编写代码实现的。很多时候存储的是事实表、维度表和实体表。DWM(Data WareHouse Middle) -
数据中间层。该层主要是对DWD
层做一些轻微的聚合操作,生成一些指标列的聚合结果表。DWS(Data WareHouse Service) -
数据服务层。该层是在DWM
层基础之上,整合汇总成一个主题域的数据服务层,一般是宽表(具有多个列的表),该层为后续的业务查询、OLAP
分析和数据分发提供支撑。
数据应用层
数据应用层ADS(Application Data Service) -
该层主要为数据产品和数据分析提供数据支撑。一般会存放在ES、MySQL、Redis
等数据库系统中,为应用系统提供数据,也可以存放在hive
或者Druid
中,供数据分析与数据挖掘使用,比如数据报表就是存在该层中。
事实表(Fact Table)
事实表是指存储有事实记录的表,比如系统日志、销售记录等。事实表的记录在不断地增长,比如电商的商品订单表,就是类似的情况,所以事实表的体积通常是远大于其他表。
维表层(Dimension
)
维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联,相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。维度表主要是包含两个部分:
- 高基数维度数据:一般是用户资料表、商品资料表类似的资料表,数据量可能是千万级或者上亿级别
- 低基数维度数据:一般是配置表,比如枚举字段对应的中文含义,或者日期维表等;数据量可能就是个位数或者几千几万。
常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。
表命名规则
聚合粒度以及加工频率字段说明
字段中文 | 字段 | 字段全称 | 说明 |
---|---|---|---|
日 | d | day | 每天 |
周 | w | week | 每周 |
月 | m | month | 每月 |
年 | y | year | 每年 |
小时 | h | hour | 每小时 |
半小时 | hh | halfhour | 每半小时 |
抽取方式字段命名规范
抽取方式 | 字段 | 字段全称 |
---|---|---|
全量 | f | full |
增量 | i | incremental |
拉链 | c | chain |
数据表名命名规范
模型层次 | 表命名规范 | 实例表明 | 实例表说明 |
---|---|---|---|
ods | ods_业态简称+系统入仓序号_源表名_加工频率+抽取方式 | ods_sg01_bill_df | ods为模型层次、sg为业态、01为业态下的系统入仓序号、bill代表数据源表名、d代表加工频率、f代表全量抽取方式 |
dwd | dwd_主题域_可选的主题_事实表相关描述_加工频率+抽取方式 | dwd_par_trader_detail_df | dwd为模型层次、par为主题域名、trader为商户主题名、detail为表描述、d代表加工频率、f代表全量抽取方式 |
dwm | dim_通用维度相关描述_加工频率+抽取方式 | dwm_brand_df | dwm为模型层次、brand为通用维度表描述、d代表加工频率、f代表全量抽取方式 |
dws | dws_主题域_可选的主题相关描述_聚合粒度+抽取方式 | dws_par_trader_count_df | dws为模型层次、par为主题域名、trader为商户主题名、count为表的描述、d代表加工聚合粒度、f代表全量抽取方式 |
ads | ads_主题域_相关描述_加工频率+抽取方式 | ads_trader_count_df | ads为模型层次、trader_count代表相关描述、d代表加工频率、f代表全量抽取方式 |
表分区字段说明
分区类型 | 分区字段 | 分区数据格式 | 备注 |
按天分区 | stat_date | YYYYMMDD | |
按周分区 | stat_week | 自定义 | 转换当天所在月或者直接使用当周最后一天都可 |
按月分区 | stat_month | YYYYMM | |
按年分区 | stat_year | YYYY | |
按小时分区 | stat_date | YYYYMMDDHH | |
按半小时分区 | stat_date | YYYYMMDDHHMM |
任务命名规范
大厂分层架构
爱奇艺
SaaS收银运营数仓分层架构
这里作者的案例是美团站点分享的SaaS收银运营数仓
建设一文中的架构,这个分层架构大概是五层,虽然从名称上看着和通用分层架构差异比较大,实际具体功能上,只是增加了一个DWT主题宽表层,APP层和通用的ADS层作用基本一致,DWA汇总层其实和通用的DWS层是类似的。
DWT层主题宽表层,其实是对DWD各层的信息进行join整合,基于主题,将业务过程相关的数据冗余处理,从而方便上层DWS汇总数据使用。