查詢語言。由於SQL在數據倉庫中被廣泛使用,因此針對Hive的特點設計了壹種類似SQL的查詢語言HQL。熟悉SQL開發的開發人員可以輕松使用Hive進行開發。
2.數據存儲位置。Hive是基於Hadoop構建的,所有Hive數據都存儲在HDFS。和數據庫
您可以將數據保存在本地文件系統中。
3.數據格式。Hive沒有定義特殊的數據格式,並且數據格式可以由用戶指定,而自定義數據格式需要指定三種。
屬性:列分隔符(通常是空格“\t“、“\ x001“)、行分隔符(“\n“)和讀取文件數據的方法(Hive中默認有三種文件格式TextFile、SequenceFile和RCFile)。由於在加載數據的過程中不需要將用戶數據格式轉換為Hive定義的數據格式,因此Hive在加載過程中不會修改數據本身,而只是將數據內容復制或移動到相應的HDFS目錄中。在數據庫中,不同的數據庫有不同的存儲引擎,並定義了自己的數據格式。所有數據都將根據特定的組織進行存儲,因此將數據加載到數據庫的過程將非常耗時。
4.數據更新。Hive是為數據倉庫應用而設計的,數據倉庫的內容是多讀少寫。因此,Hive不
支持重寫和添加數據,所有數據都是在加載期間確定的。數據庫中的數據通常需要經常修改,因此您可以使用INSERT INTO...值添加數據並使用UPDATE。...
SET修改數據。
5.索引。正如我之前所說,在數據加載過程中,Hive不會對數據進行任何處理甚至掃描。
因此,數據中的某些鍵沒有索引。Hive想要訪問數據中滿足條件的特定值時需要對整個數據進行劇烈掃描,因此訪問延遲較高。由於MapReduce的引入,Hive可以並行訪問數據,因此即使沒有索引,Hive在訪問大量數據時仍然可以顯示出優勢。在數據庫中,通常為壹列或多列建立索引,因此數據庫可以高效、低延遲地訪問特定條件下的少量數據。由於數據的高訪問延遲,Hive不適合在線數據查詢。
6.實施。Hive中的大多數查詢都是通過Hadoop提供的MapReduce執行的(類似於select * from tbl
的查詢不需要MapReduce。數據庫通常有自己的執行引擎。
7.執行延遲。如前所述,當Hive查詢數據時,由於沒有索引,它需要掃描整個表,因此延遲很高。另外
導致Hive執行高延遲的壹個因素是MapReduce框架。因為MapReduce本身具有很高的延遲,所以在使用MapReduce執行Hive查詢時也會有很高的延遲。相比之下,數據庫的執行延遲較低。當然這個低是有條件的,就是數據規模小。當數據規模超過數據庫的處理能力時,Hive的並行計算可以明顯地顯示出其優勢。
8.可擴展性。由於Hive構建於Hadoop之上,因此Hive的可擴展性與Hadoop相同。
壹致(世界上最大的Hadoop集群在Yahoo!2009年,規模在4000個節點左右)。但是,由於ACID語義的嚴格限制,數據庫的擴展行非常有限。目前最先進的並行數據庫Oracle理論上只有100套左右。
9.數據規模。Hive建立在集群上,可以使用MapReduce進行並行計算,因此它可以支持大規模
數據;相應地,數據庫能夠支持的數據也很少。