电商离线数仓项目-数仓分层哪几层?/数仓为什么要分层?

电商离线数仓

  • 数仓分成哪几层?
  • 数仓为什么要分层?
  • 电商离线数仓项目中的数仓

数仓分成哪几层?

1、ODS层(原始数据层):存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
2、DWD层(明细数据层)
结构和粒度与ODS层保持一致,对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据),也有公司叫DWI。
3、DWS层(服务数据层)
以DWD为基础,进行轻度汇总。一般聚集到以用户当日,设备当日,商家当日,商品当日等等的粒度。
4、 ADS层(数据应用层)
数据应用层,也有公司或书把这层命名为APP层、DAL层等。
面向实际的数据需求,以DWD或者DWS层的数据为基础,组成的各种统计报表。统计结果最终同步到RDS以供BI或应用系统查询使用。

数仓为什么要分层?

1.把复杂问题简单化
将一个任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解.
2.清晰的数据结构
每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解.
3.减少重复开发
规范数据分层,通过中间数据层,能够减少极大的重复计算,增加一次计算结果的复用性.
4.隔离原始数据
不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开.

电商离线数仓项目中的数仓

1)ODS层(原始数据层):存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。存储两个最初始的文件:ods_start_log和ods_event_log。
(我们在导完了一层之后,要去查看是否导入成功,如果要查看数据的行数,HQL语句可以写成:

select row_number() over(),* from ods_start_log;

2)DWD层 (数据明细层) : 对ods层数据进行清洗,去除空值,脏数据,超过极限范围的数据,行式存储改为列式存储,改变压缩格式。
3) DWS(数据服务层),以DWD层为基础,对数据进行轻度的聚合。
日活:对DWD层里面的启动表的mid字段进行groupby去重,有多少个mid就表示有多少个启动过APP,那只要启动过APP的用户就代表了当日活跃。这里对日活的定义进行更为准确的理解,那就是:打开应用的用户即为活跃用户,不考虑用户的使用情况。每天一台设备打开多次会被计为一个活跃用户。
周活:在当周有启动过APP的用户就是周活跃用户。对DWD层里面的启动表的mid字段进行groupby去重,有多少个mid就表示有多少个启动过APP.最后count(*)就是计算出来了周活。
每日新增:用每日活跃用户表 left join 每日新增设备表,关联的条件是mid_id相等。如果是每日新增的设备,则在每日新增设备表中为null。
4)ADS(数据应用层):面向实际的数据需求,组成的报表统计。

你可能感兴趣的:(Hive,数仓,数据仓库)