緩慢漸變維:維度會隨著時間發生緩慢的變化。
處理方式:
全量快照
拉鍊表全量快照很簡單,今天我們來看看拉鍊表。。。
拉鍊表是處理緩慢漸變維的一種方式,它區別於正常的表而言,會多兩個字段,start_date和end_date,代表這條資料的起始時間和結束時間。
如:james同學哪天想不開了,他從男的變成了女的。
id
name
***
dept
start_date
end_date
james
hsl 男
00120200101
20200821
james
hsl 女
00120200822
99991231
適用場景:資料會發生變化,但是大部分不變。比如:使用者維度表、信用卡的使用者額度等
優點:節約儲存
缺點:維護成本大,有一定學習成本
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'
)aleft outer join
( select
id
,nick_name
,phone_num
,gender
,create_time
,update_time
from
ods_user_info_di -- t-1 增量
where
ds='20200822'
)bon a.id = b.id;
--刪除t-3分割槽資料,儲存最近兩天的分割槽即可,若不刪除,儲存比全量快照還要大,失去使用拉鍊表的的意義
alter table dwd_fyp_user_info_df drop if exists partition(biz_date='20200820');
資料倉儲 緩慢變化維
緩慢變化維處理方法 什麼是緩慢變化維 緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度表的歷史變化資訊的問題稱為處理緩慢變化維的問題。比如學生的班級,年級等 表中的處理方法 1.重寫覆蓋 初...
hive 資料倉儲之拉鍊表
先去看這篇文章 首先,下面的user表沒有用到。而且貌似也沒有用,文章中為什麼要user表我也搞不懂。明明user的拉鍊表可以就包含了user全量表的資料了。由於hdfs和hive的底層因素,不支援修改操作。所以修改資料只能先把資料查詢出來,修改完後再覆蓋原本的資料。我對上述insert sql的理...
拉鍊表思想(緩慢變化維)
問題 有一類問題,比如像使用者修改了訂單狀態,需要看每個狀態的生效時間範圍等等,這類因為維度變化,又需要反映歷史變化的情況可以使用拉鍊表 思路 業務系統當使用者操作的時候記錄使用者訂單狀態的操作時間,如下建表order update,還有最終呈現效果的orer his表,每這部分修改的資料按照新增和...