数据仓库设计
1、目标
1)清晰数据结构:每个数据层都有自己的作用和职责,在使用和维护的时候能够更方便和理解;
2)统一数据口径:通过数据分层,提供统一的数据出口,统一输出口径;
3)减少重复开发、助力业务提效:规范数据分层,开发通用的中间层,避免各业务层直接使用原始数据,减少重复计算工作,dws 层解决算法、数分、运营、产品等业务人员绝大多数用数场景;
2、数据仓库架构
![](https://static001.geekbang.org/infoq/56/5699cc9cc7a56cc44191dc99ee083e3b.png)
1)ODS 层
operation data store,数据仓库准备层,也称为原始数据层。源头数据源中的数据经过 ETL 之后进入本层。结合公司实际情况,考虑后续可能需要追溯原始数据,因此对于这一层不做过多的数据清洗工作,保留原始数据即可。因此,这一层数据一般与源头数据保持一致,或是清微的加工。
源头数据同步方式:
业务库 RDB(Relation Database):sqoop 定时抽取,实时方面考虑使用 canel 监听 MySQL(或其他 RDB)的 binlog 日志,实时接入即可;
埋点日志:日志一般是以文件的形式保存,可以选择使用 flume 等工具来定时同步;实时同步则使用 spark streaming 或 flink、kafka 来实时接入;
消息队列:来自 MQ、Kafka 的数据等;
第三方系统:主要指投放平台、CRM、ERP、AppsFlyer 等第三方系统数据,通过第三方平台提供的 API 获取;
除此之外,开源工具如 Airflow、DolphinScheduler、Seatunnel 等也是主流的多源异构数据同步工具。
2)DWD 层
数据明细层,该层是业务层和数据仓库的隔离层,保持和 ODS 层一样的数据颗粒度。主要是对 ODS 数据层做一些数据的清洗和规范化的操作,比如去除重复数据、脏数据】异常数据等。
3)DWS 层
轻度汇总数据层,该层是在 DWD 层的数据基础上,对数据做一些轻量聚合操作,一般是宽表,用于提供后续的业务查询、OLAP 分析等。
4)ADS 层
应用数据支,该层主要面向某一业务主题,经过高度聚合后,提供给数据产品使用的数据。比如常用的 BI 报表数据就来源于此。
5)DIM 层
维度表。
6)表命名规范
表命名规范,如:{项目名称}_数仓分层_所属部门_业务域_自定义表名_刷新周期标识_增量/全量标识
项目名称:不同项目数据存放在不同库名下;
所属部门:如研发、运营、市场等,研发:rd,运营:opd,市场:market 等,多部门共用写 pub;
业务域:如广告 load、show、click、变现等;
自定义表名:自行定义的表名称;
刷新周期标识:表的更新时间,常用 daily、hourly 等;
增量、全量标识:全量更新-ful,增量更新-inc;
特殊情况下,当该表为临时表时,以 tmp 命名开头作为区分;
例如:blockblast_dws_pub_ad_revenue_daily_inc,就表明该项目是"blockblast",属于轻度汇总层数据,多部门使用,广告业务域,收入数据,按天同步,增量表;
7)埋点文档
根据埋点 SDK 点位对照表,明确每个事件、每个字段的业务含义,在数据建模和数据查询时加以参照。
评论