問題導讀:
- 什么是數據倉庫
- 數據倉庫與數據庫的區別
- 數據倉庫的適用場景
Hive作為Hadoop生態圈重要的一員已經被我們所熟知,它作為一個基於Hadoop的數據倉庫工具,用來做離線的數據分析工作。那么什么是數據倉庫,它與我們經常使用的數據庫有什么不同呢?
什么是數據倉庫
數據倉庫(Data Warehouse)是一個面向數據分析的集成化數據環境,它可以通過對大量數據進行分析從而得出分析報告並提供決策支持。需要注意的是,數據倉庫本身並不生產數據,同時也不消費數據,它的數據來源於外部,並且通過某種分析方式對外進行開發。所以我們稱它為數據倉庫而非“數據工廠”。
一句話描述數據倉庫的主要特征
面向主題:這個特征比較抽象,它其實是相對於面向應用的傳統數據庫而言,不僅僅針對於某一個應用(比如用戶表——登陸,權限表——驗證),而是多維多角度的較高層次上的數據綜合、歸類和分析的抽象。
集成的數據:數據倉庫中的數據來源廣泛,每個主題所對應的數據源在其原有的數據存儲中有很多重復和不一致的地方,所以數據進入到數據倉庫之前必須要經過統一與綜合,也就是我們常說的數據ETL流程(extraction抽取 transformation轉換 loading加載),這一步其實是數據倉庫最重要的一步,整潔、易用的數據才能發揮最大的價值。
不可更新(較難更新):數據倉庫中存儲的數據為一定時間內的歷史數據及其進行統計、綜合和重組之后的數據,而非聯機處理的數據。所涉及的數據操作主要是數據的查詢,一般情況下並不會進行修改操作。而且由於數據倉庫本身的特性對數據查詢需要更高的要求,會采用更復雜的索引技術,對於有些設計是比較難實現快速更新操作的。(后面會提到)
隨時間而不斷變化:這個是毋庸置疑的,數據倉庫里面的數據隨着時間的變化會錄入與時間相匹配的數據,幫助用戶進行決策分析等。

上面這張圖其實就是一個典型的數據倉庫架構圖。我們可以清楚的看到前面我們講述的數據倉庫相關的特性。通過ETL等多種工具對多種數據源的數據進行數據提取、轉換和整合,將數據加載到數據倉庫。並定期的刷新隨着時間增長的數據到數據倉庫。數據倉庫內又會有多個DataMart(數據集市),提供多維的數據檢索方式給前端應用。
上面我們看到了一個關鍵詞OLAP。我們之前也可能聽過OLTP,那么我們講數據庫與數據倉庫的區別其實也算是OLTP和OLAP的區別了。
數據庫與數據倉庫的區別
我們先來了解一下OLTP和OLAP。
操作型處理,叫聯機事務處理 OLTP(On-Line Transaction Processing),也可以稱面向交易的處理系統,它是針對具體業務在數據庫聯機的日常操作,通常對少數記錄進行查詢、修改。用戶較為關心操作的響應時間、數據的安全性、完整性和並發支持的用戶數等問題。傳統的數據庫系統作為數據管理的主要手段,主要用於操作型處理。
分析型處理,叫聯機分析處理 OLAP(On-Line Analytical Processing)一般針對某些主題的歷史數據進行分析,支持管理決策。
通過我們的介紹,我們可以意識到數據庫和數據倉庫所適用的場景是不一樣的,數據倉庫的出現也不是為了替代數據庫。
- 數據庫存儲的多為實時的業務數據,而數據倉庫存儲的多為歷史數據。
- 數據庫是面向事務設計的,而數據倉庫是面向主題設計的。
- 開發人員都知道,數據庫的設計都會盡量的避免冗余,針對於某一業務進行設計。而數據倉庫的設計則是在有意的引入冗余,依照各種分析需求、維度、指標等進行設計。
- 數據庫是為了業務的數據讀寫,而數據倉庫是為了分析大量數據。
元數據管理
數據倉庫中一個最重要的組成部分就是元數據管理,元數據管理簡單來說就是關於數據倉庫中數據的數據。類似於字典和黃頁。保存了整個數據倉庫邏輯數據結構、地址、索引、文件等等信息。
元數據管理會記錄數據倉庫中模型的定義、各層級間的映射關系、監控數據倉庫的數據狀態及 相關ETL 的任務運行狀態等,使數據倉庫的設計、部署、操作和管理能達成協同和一致。
元數據的存儲常見的方式有兩種,一種是以數據集為基礎,每一個數據集有對應的元數據文件,每一個元數據文件包含對應數據集的元數據內容;另一種存儲方式是以數據庫為基礎,即元數據庫。比如Hive我們常常使用mysql作為其元數據庫(metastore)的存儲。
那么問題來了,Hive作為一個優秀的數據倉庫,它是如何這么深入人心呢?
參考文獻:
An Overview of Data Warehousing and OLAPTechnology
歡迎關注我:叄金大數據(不穩定持續更新~~~)

