用户表中的数据每日既有可能新增,也有可能修改,但修改频率并不高,属于缓慢变化
维度,此处采用拉链表存储用户维度数据。
1
)什么是拉链表
2)为什么要做拉链表
3)拉链表形成过程
4)拉链表制作过程图
5
)拉链表制作过程
步骤
0
:初始化拉链表(首次独立执行)
(
1
)建立拉链表
(2)初始化拉链表
步骤
1
:制作当日变动数据(包括新增,修改)每日执行
(
1
)如何获得每日变动表
a.
最好表内有创建时间和变动时间(
Lucky!
)
b.
如果没有,可以利用第三方工具监控比如
canal
,监控
MySQL
的实时变化进行记录
(麻烦)。
c.
逐行对比前后两天的数据,检查
md5(concat(
全部有可能变化的字段
))
是否相同
(low)
d.
要求业务数据库提供变动流水(人品,颜值)
(
2
)因为
ods_user_info
本身导入过来就是新增变动明细的表,所以不用处理
a
)数据库中新增
2020-06-15
一天的数据
b
)通过
Sqoop
把
2020-06-15
日所有数据导入
mysql_to_hdfs.sh all 2020-06-15
c
)
ods
层数据导入
hdfs_to_ods_db.sh all 2020-06-15
步骤
2
:先合并变动信息,再追加新增信息,插入到临时表中
1
)建立临时表
2)导入脚本
步骤 3:把临时表覆盖给拉链表
1
)导入数据
hive (gmall)>
insert overwrite table dwd_dim_user_info_his
select * from dwd_dim_user_info_his_tmp;
2
)查询导入数据
hive (gmall)>
select id, start_date, end_date from dwd_dim_user_info_his limit 2;
(注:拉链表数据,两表合并,解决数据增量问题,解决hive数据不能更新的问题,不停合并,覆盖,实现数据更新)