一、问答介绍
1.什么是拉链表?
维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。记录一个事物从开始,一直到当前状态的所有变化的信息(生命周期)。核心字段为生效开始日期与生效结束日期(粒度)。
2.为什么用拉链表(应用场景决定)?
1)原数据量很大(查询费劲)
2)表中部分字段会被更新(更新后又想看历史)
3)需求中需要对某一时刻数据查询(业务粒度)
4)更新频率不频繁且更新数据量不大(拉链表过大就没多大意义了)
5)需要节省存储资源(节约成本)
二、Hive使用拉链表
1.案例场景:将mysql中的数据按每日的粒度增量(新建+修改)跟新到hive拉链表。
2.需求:通过相关操作得到最新的拉链表。
3.相关表:mysql原表,Hive拉链表,Hive数据变化表,Hive数据临时表
4.相关技巧点(先思考,后面解释):
1.如何获取mysql当日数据变动?(粒度为天)
2.如何hive表跟新修改后的数据?(如何改变生效结束日期)
3.拉链表如何跟新?(hive不能修改)
5.获取mysql每日数据变化:获取到每日变化的数据后,将数据覆盖到hive数据变化表:初始化拉链表为mysql全量导入hive拉链表
1.设计mysql表时加入数据创建时间及操作更新时间(最优)
2.第三方监控工具如canal(繁琐)
6.hive更改数据的生效结束时间:将新增数据获取到hive临时表
7.将hive临时表覆盖hive拉链表,任务完成。
8.hive临时表为该方案的核心技术点。
若有疑问可评论中提出,后续补充到本文。