数据体系搭建步骤
业务板块 -> 数据域 -> 事实表 -> 数据同步(ELT)
- 梳理业务数仓的数据流程图
- 业务表结构梳理
- 业务数仓分层规划
概念 | 理解 |
---|---|
ODS | 业务数据与数据仓库的一个隔离,该层数据结构与原始日志中的结构一致,存放的是原始日志数据。源头数据不能收到污染,必须保持和原始日志数据一致。因为数据可能存在冲突,所以最好加上时间版本用于区别相同数据。 |
DW | DW层为数据公共层,由ods层数据关联得到,之后也无需求直接从dw层拉取,管理所有数据。 |
dwd | 明细事实表:组合相关数据,解决一些数据质量问题和数据的完全度问题,采用明细宽表减少扫描,例如订单表,dwd中每个订单都只会取订单的最新状态,当出现退款订单时,因为退款日期上限位3天,故该表需要三天回准。 |
dws | 数据宽表:通过dwd、ods层数据整理出来的基于某一个主题或者活动的详细数据宽表,为上层数据产品、服务提供公共指标。 |
dim | 维表,例如国家代码+国家名,城市代码+城市名 之类的维表 |
ADS | ADS是数据集市,DW层只有某一维度的明细数据,通过需求文档关联各维度的DW数据,求出最终的业务数据,提供给需求方。 |
- 资源准备(MaxCompute、DataWorks、RDS等)
- 配置数据上云、数据精炼任务,配置任务监控
- ODS(hive)-> 数据清洗(去重、脏数据)-> 数据开发(离线计算hive/spark sql)、流式开发(stream)、算法开发 -> 数据服务、报表/BI、智能应用
数据分层
1、贴源数据层ODS
原样copy业务系统的数据表过来,可以放在hive、maxcompute里,不做清洗和加工。
从ETL变为了ELT,抽取(extract)、转换(transform)、加载(load)。
入库后数据表命名规则:ods_业务系统简称_表名_dt/df
该层还可能包含技术缓冲表,是为了在数据加载中处理异常及类型转换时的临时表(表命名建议为xxx_tmp)。
抽取主要有2种:增量、全量。
- 实体表:每日全量
- 维度表:每日全量(不变的性别、民族等字典表可只全量一份)
- 事务型事实表:生成后不变。每日增量,按时间创建分区。
- 周期型事实表:每日新增及变化量更新,包括了当日新增和修改。
- 举例可见:https://blog.csdn.net/weixin_43599377/article/details/106446191
2、统一数仓层DW
要把原本的关系型表结构,进行一定程度的维度退化,即表的合并,虽数据有些冗余,但能减少多个跨表操作的计算开销。
同步任务中可以走个分支写入一些日志,便于排查异常和问题。
维度建模是Kimball在《数据仓库工具箱》中所倡导的数据建模方法,也是目前在大数据场景下推荐使用的建模方法。因为维度建模以分析决策的需求出发来构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询性能。
实体表、维表:统一以dwd/dim开头,dwd/dim_主题域_实体名_dt/df
事实表(主键、外键-维表、度量A、度量B...)
- 明细数据层DWD:建议按数仓常见的维度建模来做,实现对贴源数据按主题域进行分类。
- 比如银行业务:通常分为7-10个主题,包括当事人、协议、事件、渠道、产品主题等。
- 比如建筑业务:包括项目、设备、物资、劳务人员、财务、主题等。
- 汇总数据层DWS:汇总表,形成宽表,用于数据集市
- 完成基础数据的预连接、预计算、预汇总,以应用为驱动。
- 对多个应用中需要重复汇总计算的部分进行提炼的共性加工数据,做到一次加工,多次使用。
- 为应用使用生成的计算结果表、可冗余,如按某一个维度进行的汇总表。
3、标签数据层TDM(可选)
面向对象建模,通过ID-Mapping把各业务板块、业务过程中的同一对象的数据打通。
数澜建议按“人、物、关系”来划分一级类目,再按照业务特性对每个一级类目进行二级、三级的拆分,通常我们建议将标签类目划分到三级。
-
基础标签:直接对应的业务表字段,如性别、城市等
-
统计标签:标签定义含有常规的统计逻辑,开发时需要通过简易规则进行加工,如年增长率、月平均收益率等
-
算法标签:标签定义含有复杂的统计逻辑,开发时需要通过算法模型进行加工,如企业信用分、预测年销量等
4、应用数据层ADS
为固定报表等生成的数据表,一般会在RDS库里做持久化。
举例:https://blog.csdn.net/weixin_43599377/article/details/106446323
5、数据服务
主要有2类3形式。
一是实时数据服务。包括:数据查询,授权其他应用直接连接基础数据平台进行数据访问;API数据访问,将固化的数据访问需求封装为服务的方式发布,其他应用可以通过API服务进行数据访问。
二是批量数据服务。主要是数据供给,即将批量数据卸载为数据文件,通过数据交换平台向其他应用提供批量数据。