本文仅供参考学习:电商数仓项目总结_a1786742005的博客-CSDN博客_数仓项目总结

一、项目整体架构

在这里插入图片描述

二、数据说明

2.1 用户行为数据

1、启动日志数据
是一个单 json 数据
2、事件日志数据
组成:时间戳、公共字段、事件日志
事件:
(1) 商品列表
(2) 商品点击
(3) 商品详情
(4) 广告
(5) 消息通知
(6) 用户后台活跃
(7) 评论
(8) 收藏
(9) 点赞
(10) 错误日志

2.2 业务数据

1、订单表
2、订单详情表
3、sku 商品表
4、用户表
5、商品一级分类表
6、商品二级分类表
7、商品三级分类表
8、支付流水表
9、省份表
10、地区表
11、品牌表
12、订单状态表
13、spu 商品表
14、商品评论表
15、退单表
16、加购表
17、商品收藏表
18、优惠券领用表
19、优惠券表
20、活动表
21、活动订单关联表
22、优惠规则表
23、编码字典表
24、活动参与商品表
25、时间表
26、假期表
27、假期年表

三、数据导入 hdfs

3.1 用户行为数据

1、用户行为数据产生

2、日志采集 flume 配置
(1) source 为 TaildirSource。
(2) channel 为 kafka channel,省去了 sink。
(3) 自定义 flume 拦截器。
自定义了两个拦截器,分别是:ETL 拦截器、日志类型区分拦截器。
ETL 拦截器:过滤时间戳不合法和 Json 数据不完整的日志。
日志类型区分拦截器:将启动日志和事件日志区分开来,方便发往 Kafka 的不同 Topic。

3、日志消费 Flume 配置
(1) source 为 kafkaSource。
(2) channel 为 fileChannel。
(3) sink 为 hdfs 上两个路径,用 lzo 压缩。

3.2 业务数据

1、流程
sqoop 导 mysql 表到 hdfs 上,也用 lzo 压缩。

2、数据同步策略
(1) 数据同步策略介绍
数据同步策略的类型包括:全量表、增量表、新增及变化表。
全量表:存储完整的数据。
增量表:存储新增加的数据。
新增及变化表:存储新增加的数据和变化的数据。

(2) 全量同步策略
每日全量,就是每天存储一份完整数据,作为一个分区。
适用于表数据量不大,且每天既会有新数据插入,也会有旧数据修改的场景。
例如:编码字典表、品牌表、商品三级分类、商品二级分类、商品一级分类、优惠规则表、活动表、活动参与商品表、加购表、商品收藏表、优惠券表、sku 商品表、spu 商品表。
在这里插入图片描述

(3)增量同步策略
每日增量,就是每天存储一份增量数据,作为一个分区。
适用于表数据量大,且每天只会有新数据插入的场景。例如:退单表、订单状态表、订单详情表、活动与订单关联表、商品评论表。
在这里插入图片描述

(4) 新增及变化策略
每日新增及变化,就是存储创建时间或操作时间都是今天的数据。
适用场景为:表的数据量大,既会有新增,有会有变化。
例如:用户表、订单表、优惠券领用表。

(5) 特殊策略
某些特殊的维度表,可不必遵循上述同步策略。
A、客观世界维度
没变化的客观世界的维度(比如性别、地区、民族、政治成分、鞋子尺码)可以只存一份固定值。
B、日期维度
日期维度可以一次性导入一年或若干年的数据。
C、地区维度
省份表、地区表

3、图示
在这里插入图片描述

四、数仓基本知识

4.1 为什么要数仓分层?

1、把复杂问题简单化
将复杂的任务分解为多层来完成,每一层只处理简单的任务,方便定位问题。

2、减少重复开发
规范数据分层,通过中间层数据,能够大量减少重复计算,增加一次计算结果的复用性。

3、隔离原始数据
无论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。

4.2 图示分层结构

在这里插入图片描述

4.3 数仓命名规范

1、表命名
ods 层命名为 ods_表名
dwd 层命名为 dwd_dim/fact_表名
dws 层命名为 dws_表名
dwt 层命名为 dwt_表名
ads 层命名为 ads_表名
临时表命名为 xxx_tmp
用户行为表,以 log 为后缀

2、脚本命名
数据源_to_目标_db/log.sh
用户行为脚本以 log 为后缀,业务数据脚本以 db 为后缀。

4.4 维度建模

维度建模基础上分三种模型:星型模型、雪花模型、星座模型。
1、星型模型
在这里插入图片描述

2、雪花模型

在这里插入图片描述

3、星座模型
在这里插入图片描述

4、模型选择
在这里插入图片描述

4.5 维度表和事实表

1、维度表
(1) 维度表介绍
一般是对事实的描述信息,每一张维度表对应现实世界的一个对象或者概念。例如:用户、商品、日期、地区等。
(2) 维度的特征
A、维度的范围很宽(具有多个属性、列比较多)
B、和事实表相比,行数比较少,通常 < 10 万条
C、内容相对固定:编码表

2、事实表
(1) 事实表介绍
事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。"事实"这个术语表示的是业务事件的度量值(可统计次数、个数、件数、金额等),例如,订单事件中的下单金额。

(2) 事实表包括
每一个事实表的行包括:具有可加性的数值型的度量值、与维度相连接的外键、通常具有两个和两个以上的外键、外键之间表示维表之间多对多的关系。

(3) 事实表的特征
A、非常的大
B、内容相对的窄,列数较少
C、经常发生变化,每天会新增加很多

3、事实表分类
(1) 事务型事实表
以每个事务或事件为单位,例如一个销售订单记录,一笔支付记录等,作为事实表里的一行数据。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。

(2) 周期型快照事实表
周期型事实表中不会保留所有数据,只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等。

(3) 累积型快照事实表
累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。

4.6 数据仓库建模

1、ods 层
(1) 保持数据原貌不做任何修改,起到备份数据的作用。
(2) 数据采用压缩,减少磁盘存储空间(例如:原始数据 100G,可以压缩到 10G 左右)。
(3) 创建分区表,防止后续的全表扫描。

2、dwd 层
dwd 层需要构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。
维度建模一般按照以下四个步骤:
选择业务过程 -> 声明粒度 -> 确认维度 -> 确认事实。

(1) 选择业务过程
在业务系统中,挑选我们感兴趣的业务线,比如下单业务、支付业务、退款业务、物流业务,一条业务线对应一张事实表。

(2) 声明粒度
数据粒度是指数据仓库中的数据保存数据的细化程度和综合程序的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应对各种各样的需求。
典型的粒度声明如下:
订单中,每个商品项作为下单事实表中的一行,粒度为每次下单。
每周的订单次数作为一行,粒度就是每周下单。
每月的订单次数作为一行,粒度就是每月下单。

(3) 确定维度
维度的主要作用是描述业务是事实,主要表示的是"谁、何处、何时"等信息。

(4) 确定事实
此处的事实一词,指的是业务中的度量值,例如订单金额、下单次数等。
在 dwd 层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
在这里插入图片描述

在这里插入图片描述

3、dws 层
统计各个主题对象的当天行为,服务于 dwt 层的主题宽表,以及一些业务明细数据,应对特殊需求。
每日设备行为、每日会员行为、每日商品行为、每日优惠券统计(预留)、每日活动统计(预留)、每日购买行为(预留)。

4、dwt 层
以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。
设备主题、会员主题、商品主题、优惠券主题(预留)、活动主题(预留)、购买主题(预留)。

5、ads 层
对电商系统各大主题指标分别进行分析。

五、ods 层架构

电商数仓(ods 层)_a1786742005的博客-CSDN博客

六、dwd 层架构

电商数仓(dwd 层)_a1786742005的博客-CSDN博客_dwd层

七、dws 层架构

电商数仓(dws 层)_a1786742005的博客-CSDN博客_dws层

八、dwt 层架构

电商数仓(dwt 层)_a1786742005的博客-CSDN博客_dwt层

九、ads 层架构

电商数仓(ads 层)_a1786742005的博客-CSDN博客_ads层

十、项目总结

1、搭建数据仓库,提前做好需求分析,很关键。
2、整个数据仓库中 ods 层 25 张表,dwd 层 26 张表,dws 层 6 张表,dwt 层 5 张表,ads 层 19 张表,共计 81 张表。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐