1.什麼是拉鍊表?mysql
維護歷史狀態,以及最新狀態數據的一種表,拉鍊表根據拉鍊粒度的不一樣,實際上至關於快照,只不過作了優化,去除了一部分不變的記錄,經過拉鍊表能夠很方便的還原出拉鍊時點的客戶記錄。記錄一個事物從開始,一直到當前狀態的全部變化的信息(生命週期)。核心字段爲生效開始日期與生效結束日期(粒度)。sql
2.爲何用拉鍊表(應用場景決定)?工具
1)原數據量很大(查詢費勁)優化
2)表中部分字段會被更新(更新後又想看歷史)設計
3)需求中須要對某一時刻數據查詢(業務粒度)code
4)更新頻率不頻繁且更新數據量不大(拉鍊表過大就沒多大意義了)blog
5)須要節省存儲資源(節約成本)生命週期
1.案例場景:將mysql中的數據按每日的粒度增量(新建+修改)跟新到hive拉鍊表。資源
2.需求:經過相關操做獲得最新的拉鍊表。class
3.相關表:mysql原表,Hive拉鍊表,Hive數據變化表,Hive數據臨時表
4.相關技巧點(先思考,後面解釋):
1.如何獲取mysql當日數據變更?(粒度爲天) 2.如何hive表跟新修改後的數據?(如何改變生效結束日期) 3.拉鍊表如何跟新?(hive不能修改)
5.獲取mysql每日數據變化:獲取到每日變化的數據後,將數據覆蓋到hive數據變化表:初始化拉鍊表爲mysql全量導入hive拉鍊表
1.設計mysql表時加入數據建立時間及操做更新時間(最優) 2.第三方監控工具如canal(繁瑣)
6.hive更改數據的生效結束時間:將新增數據獲取到hive臨時表
7.將hive臨時表覆蓋hive拉鍊表,任務完成。
8.hive臨時表爲該方案的核心技術點。
如有疑問可評論中提出,後續補充到本文。