Hive 采用了類似SQL 的查詢語言 HQL (Hive Query Language),因此很容易將 Hive 理解為數據庫。其實Hive 是為數據倉庫設計的,是數據倉庫的客戶端,所以要搞清楚Hive與數據庫的區別,只要我們搞清楚數據倉庫和數據庫的區別就可以了。
一、概念
數據庫其實是一種邏輯概念,用來存放各種數據(通常數據庫指關系數據庫),而數據倉庫是數據庫概念的升級。換句話說,數據倉庫可以理解為多個數據庫的集合,也是由一張一張的數據表組成的,可以從以下方面區分理解。
從邏輯上理解,數據庫和數據倉庫沒有區別,都是用來存儲數據的。
從數據量來說,數據倉庫要比數據庫數據量體積龐大得多,通常數據倉庫是GB級別(百萬行數據)大小,而數據倉庫則是TB級別甚至是PB級別。
從用途上來看,數據庫主要用于業務平臺的事務處理(不同業務平臺有各自的數據庫),而數據倉庫主要用于海量數據分析。
二、設計原則
關系數據庫一般情況下遵循范式設計,目前關系數據庫有六種范式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯−科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。通常設計只需滿足3NF規范即可。3NF范式主要要求包括如下:
第1,表內的每一個值都只能表達一個意思。
第2,表內的每一行都有唯一的主鍵。
第3,表內的每一行的非主鍵不應該依賴于其它字段信息。
數據倉庫設計原則要考慮的因素較多,從訪問性能、數據成本、使用成本、數據質量、擴展性來考慮。簡單概括如下:
第1,數據產出穩定并且有保障
第2,保證數據干凈,數據質量
第3,數據要涵蓋的業務足夠廣
第4,數據構成體系足夠透明
由此數據倉庫設計采用范式+維度設計,從而達到全局數據分析的目的。
三、功能實現
關系數據庫通過數據庫軟件來實現,主流的關系數據庫軟件有SQL Server、Oracle、MySQL、DB2等,主要用于業務事務的處理。
數據倉庫并不是基于某個軟件來實現,而是基于Hadoop生態來構建的。數據存儲基于HDFS來實現分布式文件存儲,通過Sqoop、Maxwell、Datax來實現數據倉庫的數據導入導出,通過Hive、Spark、Flink來實現數據挖掘分析,從而達到輔助企業做決策。
四、數據體現
關系數據庫通常服務于企業的業務平臺,每個業務平臺都有各自的關系數據庫及其對應的表,各業務平臺之間是獨立且分離的。表中保存的是與業務相關的數據,反應了與業務相關數據的動態情況,記錄地是業務目前的狀態。
數據倉庫的數據保存地是各個業務平臺的一個或者多個數據庫或者文件,比如說像MySQL、redis、Excel文本文件、各業務平臺日志文件等等,可以簡單理解為很多個業務平臺的數據往數據倉庫輸送,是各種數據的一個集合體。多個業務平臺輸入的數據都會被保存下來,一般情況不會刪除掉,這樣也就體現出數據倉庫中的數據是有歷史軌跡的,數據量體積相對關系數據庫更加龐大,這也是與關系數據庫的不同之處。
五、總結
數據倉庫本質也是數據庫,這是它們在概念上相同之處,不同點體現在使用用途、數據量存儲方面。從軟件的實現及操作方面也就有明顯區別,比如關系數據庫支持增刪改操作,且對交互要求高;數據倉庫通常是一次寫入多次讀取,不支持修改和刪除,對交互要求不高。