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