拉链表流程图:
需求:在mysql数据库中有一个人员信息表(userinfo)
数据字段如下:
在Mysql中的建表语句为:
– 创建数据库
create database if not exists exam;
– 创建人员表
create table if not existsexam
.userinfo
(
user_id varchar(50), – 人员编号
phone_number varchar(50), – 人员手机号
health_code varchar(50), – 健康码的颜色
reg_time varchar(50), – 用户注册日期
modify_time varchar(50) – 健康码颜色修改日期
);
2020年04月30日的数据如下:
插入语句:
insert into
exam
.userinfo
(user_id, phone_number, health_code, reg_time,modify_time) values
(‘001’, ‘15953100001’, ‘绿色’, ‘2020-03-14’, ‘2020-04-30’),
(‘002’, ‘15953100002’, ‘绿色’, ‘2020-03-14’, ‘2020-04-30’),
(‘003’, ‘15953100003’, ‘黄色’, ‘2020-03-14’, ‘2020-04-30’),
(‘004’, ‘15953100004’, ‘红色’, ‘2020-03-14’, ‘2020-04-30’);
结果:
2020年05月01日的数据如下:
修改和添加的语句:
UPDATE
exam
.userinfo
SET health_code = ‘绿色’, modify_time = ‘2020-05-01’ WHERE user_id = ‘003’;
UPDATEexam
.userinfo
SET health_code = ‘黄色’, modify_time = ‘2020-05-01’ WHERE user_id = ‘004’;
INSERT INTOexam
.userinfo
(user_id, phone_number, health_code, reg_time,modify_time) VALUES
(‘005’, ‘15953100005’, ‘绿色’, ‘2020-05-01’, ‘2020-05-01’);
第一次最后结果视图:
2020年05月02日的数据如下:
修改和添加语句:
UPDATE
exam
.userinfo
SET health_code = ‘绿色’, modify_time = ‘2020-05-02’ WHERE user_id = ‘004’;
UPDATEexam
.userinfo
SET health_code = ‘黄色’, modify_time = ‘2020-05-02’ WHERE user_id = ‘005’;
INSERT INTOexam
.userinfo
(user_id, phone_number, health_code, reg_time,modify_time) VALUES
(‘006’, ‘15953100006’, ‘绿色’, ‘2020-05-02’, ‘2020-05-02’);
从以上数据可以看出,随着时间推移而变化,我们需要将人员的所有变化的历史信息都保存下来,请在Hive中使用拉链表进行实现。
说明:分区字段为dt,判断字段为modify_time,在拉链表中添加的字段为dw_start_date(生效时间),dw_end_date(结束时间)。
第二次最后结果视图:
解题思路:
1、创建mysql库和表
-- 创建数据库
CREATE DATABASE IF NOT EXISTS exam;
-- 创建人员表
CREATE TABLE IF NOT