定義:所謂拉鍊,就是記錄歷史。記錄乙個事物從開始,一直到當前狀態的所有變化的資訊。
使用場景:舉個栗子,現有一張內含1000萬資料的訂單表,每天都有100左右的訂單狀態會變化,因業務需求要回溯某個歷史節點的一筆訂單的狀態。
現有兩種處理方式:
1.比較原始的做法,對每天的資料做切片表,檢視對應時間的切片表可以得到該訂單的歷史狀態,但是若一筆訂單在狀態一天內多次變化,切片表只會保留當天最後的狀態,若是把粒度縮小為小時級別的切片表,多張切片表會產生大量重複的冗雜資料浪費空間。
2.使用拉鍊表,首先拉鍊表將所有資料錄入,加上狀態標識為當前有效,當某條資料的更新時間變化之後,把拉鍊表保留的該條資料標識為無效,新插入更新後的資料標識為有效。在設計中經常用有效期開始時間和結束時間來判定資料的有效與否。
1.初始化
將原始表的所有資料匯入拉鍊表,初始化有效時間,有效時間start_date為資料的建立時間和更新時間較大的那項,而end_date為max值。
2.拉鍊表的每日更新
拉鍊表設計
一 建立拉鍊表 1 假如首日是2022 02 24,首先將資料從ods層載入到dim層,分割槽日期和結束日期都為9999 00 00 2 第二日2022 02 25,一部分使用者新增變化,需要把新增的和變化的裝載到dim層,分割槽結束日期是9999分割槽,但要注意9999分割槽有一部分過期資料 過期...
Hive 中拉鍊表使用場景
1.初始化一次全量資料到歷史拉鍊表中 只做一次操作就好 2.歷史拉鍊表與每日的日增量資料做merge操作 3.關閉拉鍊的時間視窗 業務場景 公司內部,員工的職級會隨著時間的變化發生緩慢的變化,例如 公升職 離職等 針對此情況,採用拉鍊表的方式既可保留歷史,也不影響使用。準備材料 1.員工表 crea...
hive 資料倉儲之拉鍊表
先去看這篇文章 首先,下面的user表沒有用到。而且貌似也沒有用,文章中為什麼要user表我也搞不懂。明明user的拉鍊表可以就包含了user全量表的資料了。由於hdfs和hive的底層因素,不支援修改操作。所以修改資料只能先把資料查詢出來,修改完後再覆蓋原本的資料。我對上述insert sql的理...