离线数仓搭建例子(电商为例)

0 架构

1.数据来源

1.1 用户行为数据

用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。

我们的日志结构大致可分为两类,一是普通页面埋点日志,二是启动日志。

普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。

启动日志结构相对简单,主要包含公共信息,启动信息和错误信息。

1.2 业务数据

就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据业务数据通常存储在MySQL、Oracle等数据库中。

总共47张表,选了27张业务表

2 数据采集

1 用户行为数据

jar-》log(日志服务器)-》flume-》kafka-》flume-》hdfs

2 业务数据

jar-》mysql-》sqoop-》hdfs

3.ODS

hdfs(ori)-》hdfs(ods)

1 用户行为数据

1张表,topic_log -> ods_log

a.建表

就一个字段”line“

b 分区

首日,每日都是全量

c .数据装载

2 业务数据

27张表

0 整体

​ b 同步

​ c .数据装载

1.活动信息表

​ activity_info -> ods_activity_info

​ a 建表

​ 少了个“activity_desc”,多了”dt”

​ b 同步

​ 首日,每日都是全量

​ c .数据装载

4.DIM

hdfs(ods)-》hdfs(dim)

构建6张维度表

1 商品维度表

​ a 建表

​ b 分区

​ 首日,每日都是全量

​ c 数据装载

2 优惠券维度表

3 活动维度表

4 地区维度表

​ b 分区

​ 地区维度表数据相对稳定,变化概率较低,故无需每日装载,首日全量

5 时间维度表

​ b 分区

​ 通常情况下,时间维度表的数据并不是来自于业务系统,而是手动写入,并且时间维度表数据具有可预见性,无须每日导入,一般首日可一次性导入一年的数据

​ c 数据装载

​ 1)创建临时表tmp_dim_date_info

​ 2)将数据文件上传到HFDS上临时表指定路径/warehouse/gmall/tmp/tmp_dim_date_info/

​ 3)执行以下语句将其导入时间维度表

1
insert overwrite table dim_date_info select * from tmp_dim_date_info;

6 用户维度表

​ b 分区

​ 拉链表

https://cloud.tencent.com/developer/article/1752848#

​ c 数据装载

5.DWD

hdfs(ods)-》hdfs(dwd)

1 用户行为日志

0 日志数据拆解

ods_log由两部分构成,分别为页面日志和启动日志,拆解成5张表

1 启动日志表

​ b 分区

​ 首日,每日全量

​ c 数据装载

2 页面日志表

3 动作日志表

4 曝光日志表

5 错误日志表

2 业务数据

1 评价事实表(事务型事实表)

​ b 分区

​ c 数据装载

​ 首日,动态分区;每日,静态分区

2 订单明细事实表(事务型事实表)

3 退单事实表(事务型事实表)

4 加购事实表(周期型快照事实表)

​ b 分区

​ c 数据加载

5 收藏事实表(周期型快照事实表)

6 优惠券领用事实表(累积型快照事实表)

​ b 分区

​ c 数据加载

​ (1)首日

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
insert overwrite table dwd_coupon_use partition(dt)
select
id,
coupon_id,
user_id,
order_id,
coupon_status,
get_time,
using_time,
used_time,
expire_time,
coalesce(date_format(used_time,'yyyy-MM-dd'),date_format(expire_time,'yyyy-MM-dd'),'9999-99-99')
from ods_coupon_use
where dt='2020-06-14';

​ (2)每日

7 支付事实表(累积型快照事实表)

8 退款事实表(累积型快照事实表)

9 订单事实表(累积型快照事实表)

6.DWS

hdfs(dwd)-》hdfs(dws)

0 整体

​ b 分区

​ c 数据装载

1 访客主题

2 用户主题

3 商品主题

4 优惠券主题

5 活动主题

6 地区主题

7.DWT

hdfs(dws)-》hdfs(DWT)

0 整体

c 数据装载

只保留当天和前一天的分区,过时的需要清理掉i

1 访客主题

2 用户主题

3 商品主题

4 优惠券主题

5 活动主题

6 地区主题

8.ADS

hdfs(DWT)-》hdfs(ADS)-》mysql

1 访客主题

1 访客统计

a 建表

指标 说明 对应字段
访客数 统计访问人数 uv_count
页面停留时长 统计所有页面访问记录总时长,以秒为单位 duration_sec
平均页面停留时长 统计每个会话平均停留时长,以秒为单位 avg_duration_sec
页面浏览总数 统计所有页面访问记录总数 page_count
平均页面浏览数 统计每个会话平均浏览页面数 avg_page_count
会话总数 统计会话总数 sv_count
跳出数 统计只浏览一个页面的会话个数 bounce_count
跳出率 只有一个页面的会话的比例 bounce_rate

b 分区

c 数据装载

第一步:对所有页面访问记录进行会话的划分。

第二步:统计每个会话的浏览时长和浏览页面数。

第三步:统计上述各指标。

2 路径分析

用户访问路径的可视化通常使用桑基图

2 用户主题

3 商品主题

4 订单主题

5 优惠券主题

6 活动主题

9.Azkaban全流程调度

就是将原来写的脚本文件串起来


:D 一言句子获取中...