問題:有一類問題,比如像使用者修改了訂單狀態,需要看每個狀態的生效時間範圍等等,這類因為維度變化,又需要反映歷史變化的情況可以使用拉鍊表
思路:業務系統當使用者操作的時候記錄使用者訂單狀態的操作時間,如下建表order_update,還有最終呈現效果的orer_his表,每這部分修改的資料按照新增和修改分類插入到order_his表中。
表結構如下:
create table order_his(
`id` string comment '訂單編號',
`order_status` string comment '訂單狀態',
`user_id` string comment '使用者id',
`operate_time` string comment '操作時間'
start_date 開始時間
end_date 生效結束時間
) comment '拉鍊表'
create table order_update(
`id` string comment '訂單編號',
`order_status` string comment '訂單狀態',
`user_id` string comment '使用者id',
`operate_time` string comment '操作時間'
) comment '訂單更新表'
具體實現sql:
插入當天更新表裡的最新記錄,更新歷史表裡已有記錄的結束時間
訂單表中資料同一天有多次狀態更新,應以每天的最後乙個狀態為當天的最終狀態。比如一天之內訂單狀態建立,支付,完成都有,應拉取最終的狀態進行拉練表更新
insert overwrite table order_his
select
id,order_status ,
user_id,
operate_time ,
'當天' start_date,
'9999-99-99' end_date
from order_update where operate_time ='當天'
union all
select
oh.id,
oh.order_status ,
oh.user_id,
oh.operate_time,
oh.start_date,
if(oi.id is null ,oh.end_date, date_add(oi.dt,-1)) end_date
from order_his oh
left join
(select * from order_update where operate_time='當天') oi
on oh.id=oi.id and oh.end_date='9999-99-99'
資料倉儲 緩慢漸變維 拉鍊表
緩慢漸變維 維度會隨著時間發生緩慢的變化。處理方式 全量快照 拉鍊表全量快照很簡單,今天我們來看看拉鍊表。拉鍊表是處理緩慢漸變維的一種方式,它區別於正常的表而言,會多兩個字段,start date和end date,代表這條資料的起始時間和結束時間。如 james同學哪天想不開了,他從男的變成了女的...
緩慢變化維
一.什麼是緩慢變化維?緩慢變化維 slowly changing dimensions,scd 它的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度,一般被稱為緩慢變化維 並且把處理維度表的歷史變化資訊的問題稱為處理緩慢變化維的問題,有時也簡...
緩慢變化維
緩慢變化維 在維度建模的資料倉儲中,通常會有乙個概念叫slowly changing dimensions,譯為 緩慢變化維 經常會被簡寫為scd。緩慢變化維的提出是因為在實際中某些情況下,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維。處...