柚子快報邀請碼778899分享:hive 拉鏈表和寬表的優(yōu)劣勢
柚子快報邀請碼778899分享:hive 拉鏈表和寬表的優(yōu)劣勢
一、拉鏈表:是一種用于數據倉庫的表結構,記錄了數據隨時間變化的歷史狀態(tài)。每次數據發(fā)生變化時,都會在拉鏈表中插入一條新記錄,而舊記錄保持不變,僅標記其有效時間區(qū)間。
在數據倉庫的數據模型設計過程中,經常會遇到這樣的需求:
數據量比較大表中的部分字段會被update,如用戶的地址,產品的描述信息,訂單的狀態(tài)等等;需要查看某一個時間點或者時間段的歷史快照信息,比如,查看某一個訂單在歷史某一個時間點的狀態(tài),比如,查看某一個用戶在過去某一段時間內,更新過幾次等等;變化的比例和頻率不是很大,比如,總共有1000萬的會員,每天新增和發(fā)生變化的有10萬左右;如果對這邊表每天都保留一份全量,那么每次全量中會保存很多不變的信息,對存儲是極大的浪費;
對于這種表有幾種方案可選: ????? 方案一:每天只留最新的一份,比如我們每天用Sqoop抽取最新的一份全量數據到Hive中。 方案二:每天保留一份全量的切片數據。 方案三: 每天保存一份增量數據 方案四:使用拉鏈表。 以上方案對比 方案一 這種方案就不用多說了,實現(xiàn)起來很簡單,每天drop掉前一天的數據,重新抽一份最新的。 優(yōu)點很明顯,節(jié)省空間,一些普通的使用也很方便,不用在選擇表的時候加一個時間分區(qū)什么的。 缺點同樣明顯,沒有歷史數據,先翻翻舊賬只能通過其它方式,比如從流水表里面抽。 方案二 每天一份全量的切片是一種比較穩(wěn)妥的方案,而且歷史數據也在。 缺點就是存儲空間占用量太大太大了,如果對這邊表每天都保留一份全量,那么每次全量中會保存很多不變的信息,對存儲是極大的浪費,這點我感觸還是很深的… 當然我們也可以做一些取舍,比如只保留近一個月的數據?但是,需求是無恥的,數據的生命周期不是我們能完全左右的。 方案三 每天都保存增量數據,這種方案相比較方案一二的話,數據量變少了,也記錄了每條數據的變化.但是數據量還是比拉鏈表多,同時它要求某天的歷史數據查詢效率比較低,比較繁瑣.比如你要求2021年10月01號的在職人數,你就需要判斷入職日期小于等于10月01號的,用lead函數獲取下條數據,判斷下條數據的離職日期是否大于2021年10月01號. 拉鏈表 拉鏈表在使用上基本兼顧了我們的需求。 首先它在空間上做了一個取舍,雖說不像方案一那樣占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是萬分之一。 其實它能滿足方案二所能滿足的需求,既能獲取最新的數據,也能添加篩選條件也獲取歷史的數據。 所以我們還是很有必要來使用拉鏈表的。
優(yōu)勢
歷史數據跟蹤:
拉鏈表能夠完整地記錄數據的歷史變化,保留數據的所有版本,方便進行時間序列分析和審計。 數據一致性:
通過記錄數據的所有變化,拉鏈表能夠確保數據的一致性和完整性,使得數據分析和報告更加準確可靠。 回溯分析:
允許用戶回溯到某一特定時間點查看數據的狀態(tài),有助于進行歷史數據分析和故障排查。 數據審計:
拉鏈表為數據審計提供了基礎,能夠詳細記錄數據的變更歷史,方便追溯和審核數據的變更過程。 簡化數據歸檔:
拉鏈表可以作為數據歸檔的一部分,將歷史數據保留在同一表中,方便管理和查詢。
劣勢
存儲空間需求高:
由于需要記錄數據的所有變化版本,拉鏈表可能會占用大量存儲空間,尤其是在數據頻繁變更的情況下。 數據插入復雜性:
每次數據變更時都需要插入新記錄,同時更新舊記錄的有效時間區(qū)間,這增加了數據插入操作的復雜性和資源消耗。 查詢復雜性:
查詢某一時點的有效數據可能需要進行時間過濾和關聯(lián)操作,增加了查詢的復雜性和執(zhí)行時間。 數據冗余:
為了保留數據的所有版本,拉鏈表可能會包含大量冗余數據,這不僅增加了存儲需求,還可能影響查詢性能。 維護成本高:
由于表結構復雜,數據插入和更新操作頻繁,拉鏈表的維護成本較高,需要更多的管理和監(jiān)控。 性能問題:
在數據量大且變化頻繁的情況下,拉鏈表的查詢和插入性能可能受到影響,尤其是在進行大規(guī)模數據分析時。 復雜的ETL過程:
構建和維護拉鏈表的ETL(提取、轉換、加載)過程相對復雜,需要處理數據的版本控制和歷史記錄管理,增加了開發(fā)和維護的難度。
二、寬表:一種數據倉庫表結構,通常包含大量的列,并盡量減少表之間的連接操作。
優(yōu)勢:
查詢性能提升:
寬表減少了多表連接(Join)的需求,從而減少了查詢的復雜度和執(zhí)行時間。對于復雜查詢,尤其是涉及多個表的查詢,寬表能夠顯著提升性能。 簡化數據模型:
寬表將相關數據集中在一起,簡化了數據模型,使得數據分析和查詢更加直觀。數據分析人員不需要處理復雜的多表關系,從而減少了錯誤的可能性。 提高數據讀取效率:
寬表可以減少IO操作次數。由于相關的數據集中存儲,讀取數據時可以一次性獲取所需信息,減少了數據讀取的次數和時間。 減少冗余存儲:
在某些情況下,寬表可以通過消除多表冗余數據存儲來節(jié)省存儲空間。雖然寬表本身可能會有較大的數據量,但與多表存儲相比較,整體存儲需求可能更低。 便于數據備份和恢復:
數據集中在一個表中,備份和恢復操作更加簡單和高效。無需在多個表之間進行協(xié)調,減少了出錯的幾率。 提高數據一致性:
寬表減少了由于多表結構導致的數據一致性問題。所有相關數據存儲在一個表中,更新操作更加簡單,降低了數據不一致的風險。 優(yōu)化數據分析和機器學習:
寬表結構適合大數據分析和機器學習應用,尤其是在需要進行特征工程和特征選擇的場景下。所有相關特征數據集中存儲,方便進行快速處理和分析。
劣勢:
存儲空間需求增加:
寬表通常包含大量的列和重復的數據,因此可能會占用更多的存儲空間,尤其是當表中包含許多冗余信息時。 數據更新復雜性:
更新寬表中的數據可能會變得復雜且耗時,因為表結構較大且字段眾多,任何更新操作都可能涉及到大量數據的修改,增加了操作的復雜性。 數據冗余:
為了減少多表連接,寬表中可能會存儲重復的數據,導致數據冗余。這不僅增加了存儲需求,還可能引發(fā)數據一致性問題。 靈活性降低:
寬表設計相對固定,添加新字段或修改現(xiàn)有結構可能需要重新設計和遷移數據,這降低了數據模型的靈活性,不利于應對快速變化的業(yè)務需求。 性能問題:
在某些場景下,寬表的查詢性能可能反而會下降,特別是在涉及到大量列掃描的情況下。如果表的寬度過大,可能會導致性能瓶頸。 維護成本高:
寬表的設計、管理和維護需要更多的精力和資源。由于表結構復雜,任何變動都可能需要大量的測試和調整,增加了維護成本。 數據管理難度增加:
寬表包含大量列,管理和理解這些數據可能會變得更加困難。數據質量、字段解釋和使用規(guī)范都需要嚴格管理,否則容易引發(fā)數據管理問題。 備份和恢復復雜性:
雖然寬表備份和恢復操作較為集中,但由于數據量大,備份和恢復的時間和資源需求也相應增加,特別是在大規(guī)模數據環(huán)境中。
柚子快報邀請碼778899分享:hive 拉鏈表和寬表的優(yōu)劣勢
精彩鏈接
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。