数据仓库-缓慢渐变维-拉链表

一、拉链表基础

慢渐变维:维度会随着时间发生缓慢的变化

处理方式:

  1. 全量快照

  2. 拉链表

全量快照很简单,今天我们来看看拉链表。。。

拉链表是处理缓慢渐变维的一种方式,它区别于正常的表而言,会多两个字段,start_date和end_date,代表这条数据的起始时间和结束时间。

如:James同学哪天想不开了,他从男的变成了女的。

id

name

sex

dept

Start_date

End_date

James

hsl

001

20200101

20200821

James

hsl

001

20200822

99991231

适用场景:数据会发生变化,但是大部分不变。比如:用户维度表、信用卡的用户额度等

优点:节约存储

缺点:维护成本大,有一定学习成本




二、实现(基本代码)

Talk is cheap. Show me the code

INSERT OVERWRITE TABLE dwd_user_info_df  PARTITION (ds='20200822')

SELECT
     id          
    ,nick_name                   
    ,phone_num                   
    ,gender                      
    ,create_time                 
    ,update_time                 
    ,'20200822'    AS start_date   
    ,'99991231'    AS end_date   
FROM
    ods_user_info_di -- T-1增量
WHERE
    ds='20200822'

UNION ALL 

SELECT
     a.id                  
    ,a.nick_name                     
    ,a.phone_num                     
    ,a.gender                        
    ,a.create_time                   
    ,a.update_time                   
    ,a.start_date                    
    ,(CASE WHEN b.id IS NOT NULL AND a.end_date = '99991231' THEN '20200821' ELSE a.end_date END) AS end_date --修改T-2全量发生状态变化的数据
FROM
(
    SELECT
          id             
        ,nick_name                     
        ,phone_num                     
        ,gender                        
        ,create_time                   
        ,update_time                   
        ,start_date                     
        ,end_date                      
    FROM
        dwd_user_info_df --T-2全量
    WHERE
        ds = '20200821'
)a
LEFT OUTER JOIN
(
    SELECT
         id    
        ,nick_name                      
        ,phone_num                      
        ,gender 
        ,create_time                    
        ,update_time                    
    FROM
        ods_user_info_di -- T-1 增量
    WHERE
        ds='20200822'
)b
ON a.id = b.id;

--删除T-3分区数据,保存最近两天的分区即可,若不删除,存储比全量快照还要大,失去使用拉链表的的意义
ALTER TABLE dwd_fyp_user_info_df DROP IF EXISTS PARTITION(biz_date='20200820');

总结

尽管拉链表可以节约存储,但是在大数据体系下,谨慎使用拉链表。对于缓慢渐变维,我们通过每天全量快照的方式来做,虽然会带来存储成本,但是你的维护成本和使用成本是最小的。我们在选择采用哪种方式的时候,要根据你的实际情况衡量,存储成本、用户使用成本、维护成本取一个平衡点就好。  而且现在的存储是比较便宜的,多几个T,少几个T,多加个机器就行了。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值