a. 查詢語(yǔ)言。由于 SQL 被廣泛的應(yīng)用在數(shù)據(jù)倉(cāng)庫(kù)中,因此,專(zhuān)門(mén)針對(duì) Hive 的特性設(shè)計(jì)了類(lèi) SQL 的查詢語(yǔ)言 HQL。熟悉 SQL 開(kāi)發(fā)的開(kāi)發(fā)者可以很方便的使用 Hive 進(jìn)行開(kāi)發(fā)。
b. 數(shù)據(jù)存儲(chǔ)位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的數(shù)據(jù)都是存儲(chǔ)在 HDFS 中的。而數(shù)據(jù)庫(kù)則可以將數(shù)據(jù)保存在塊設(shè)備或者本地文件系統(tǒng)中。
c. 數(shù)據(jù)格式。Hive 中沒(méi)有定義專(zhuān)門(mén)的數(shù)據(jù)格式,數(shù)據(jù)格式可以由用戶指定,用戶定義數(shù)據(jù)格式需要指定三個(gè)屬性:列分隔符(通常為空格、”\t”、”\x001″)、行分隔符 (”\n”)以及讀取文件數(shù)據(jù)的方法(Hive 中默認(rèn)有三個(gè)文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加載數(shù)據(jù)的過(guò)程中,不需要從用戶數(shù)據(jù)格式到 Hive 定義的數(shù)據(jù)格式的轉(zhuǎn)換,因此,Hive 在加載的過(guò)程中不會(huì)對(duì)數(shù)據(jù)本身進(jìn)行任何修改,而只是將數(shù)據(jù)內(nèi)容復(fù)制或者移動(dòng)到相應(yīng)的 HDFS 目錄中。而在數(shù)據(jù)庫(kù)中,不同的數(shù)據(jù)庫(kù)有不同的存儲(chǔ)引擎,定義了自己的數(shù)據(jù)格式。所有數(shù)據(jù)都會(huì)按照一定的組織存儲(chǔ),因此,數(shù)據(jù)庫(kù)加載數(shù)據(jù)的過(guò)程會(huì)比較耗時(shí)。
d. 數(shù)據(jù)更新。由于 Hive 是針對(duì)數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用設(shè)計(jì)的,而數(shù)據(jù)倉(cāng)庫(kù)的內(nèi)容是讀多寫(xiě)少的。因此,Hive 中不支持對(duì)數(shù)據(jù)的改寫(xiě)和添加,所有的數(shù)據(jù)都是在加載的時(shí)候中確定好的。而數(shù)據(jù)庫(kù)中的數(shù)據(jù)通常是需要經(jīng)常進(jìn)行修改的,因此可以使用 INSERT INTO … VALUES 添加數(shù)據(jù),使用 UPDATE … SET 修改數(shù)據(jù)。
e. 索引。之前已經(jīng)說(shuō)過(guò),Hive 在加載數(shù)據(jù)的過(guò)程中不會(huì)對(duì)數(shù)據(jù)進(jìn)行任何處理,甚至不會(huì)對(duì)數(shù)據(jù)進(jìn)行掃描,因此也沒(méi)有對(duì)數(shù)據(jù)中的某些 Key 建立索引。Hive 要訪問(wèn)數(shù)據(jù)中滿足條件的特定值時(shí),需要暴力掃描整個(gè)數(shù)據(jù),因此訪問(wèn)延遲較高。由于 MapReduce 的引入, Hive 可以并行訪問(wèn)數(shù)據(jù),因此即使沒(méi)有索引,對(duì)于大數(shù)據(jù)量的訪問(wèn),Hive 仍然可以體現(xiàn)出優(yōu)勢(shì)。數(shù)據(jù)庫(kù)中,通常會(huì)針對(duì)一個(gè)或者幾個(gè)列建立索引,因此對(duì)于少量的特定條件的數(shù)據(jù)的訪問(wèn),數(shù)據(jù)庫(kù)可以有很高的效率,較低的延遲。由于數(shù)據(jù) 的訪問(wèn)延遲較高,決定了 Hive 不適合在線數(shù)據(jù)查詢。
f. 執(zhí)行。Hive 中大多數(shù)查詢的執(zhí)行是通過(guò) Hadoop 提供的 MapReduce 來(lái)實(shí)現(xiàn)的(類(lèi)似 select * from tbl 的查詢不需要 MapReduce)。而數(shù)據(jù)庫(kù)通常有自己的執(zhí)行引擎。
g. 執(zhí)行延遲。之前提到,Hive 在查詢數(shù)據(jù)的時(shí)候,由于沒(méi)有索引,需要掃描整個(gè)表,因此延遲較高。另外一個(gè)導(dǎo)致 Hive 執(zhí)行延遲高的因素是 MapReduce 框架。由于 MapReduce 本身具有較高的延遲,因此在利用 MapReduce 執(zhí)行 Hive 查詢時(shí),也會(huì)有較高的延遲。相對(duì)的,數(shù)據(jù)庫(kù)的執(zhí)行延遲較低。當(dāng)然,這個(gè)低是有條件的,即數(shù)據(jù)規(guī)模較小,當(dāng)數(shù)據(jù)規(guī)模大到超過(guò)數(shù)據(jù)庫(kù)的處理能力的時(shí) 候,Hive 的并行計(jì)算顯然能體現(xiàn)出優(yōu)勢(shì)。
h. 可擴(kuò)展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴(kuò)展性是和 Hadoop 的可擴(kuò)展性是一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的規(guī)模在 4000 臺(tái)節(jié)點(diǎn)左右)。而數(shù)據(jù)庫(kù)由于 ACID 語(yǔ)義的嚴(yán)格限制,擴(kuò)展行非常有限。目前最先進(jìn)的并行數(shù)據(jù)庫(kù) Oracle 在理論上的擴(kuò)展能力也只有 100 臺(tái)左右。
i. 數(shù)據(jù)規(guī)模。由于 Hive 建立在集群上并可以利用 MapReduce 進(jìn)行并行計(jì)算,因此可以支持很大規(guī)模的數(shù)據(jù);對(duì)應(yīng)的,數(shù)據(jù)庫(kù)可以支持的數(shù)據(jù)規(guī)模較小。
Hive不支持的函數(shù):decode、rownum、to_char、replace、||、nvl、months_between、add_months、rollup、cube、rank() over、dense_rank() over、row_number() over
HIVE數(shù)據(jù)庫(kù)與ORACLE數(shù)據(jù)庫(kù)有什么區(qū)別,目前HIVE數(shù)據(jù)庫(kù)不支持哪些函數(shù)?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。