一、hive簡介
hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。其優點是學習成本低,可以通過類sql語句快速實現簡單的mapreduce統計,不必開發專門的mapreduce應用,十分適合資料倉儲的統計分析。
由於hive採用了sql的查詢語言hql,因此很容易將hive理解為資料庫。其實從結構上來看,hive和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述hive和資料庫的差異。資料庫可以用在online的應用中,但是hive是為資料倉儲而設計的,清楚這一點,有助於從應用角度理解hive的特性。
查詢語言
hqlsql
資料儲存位置
hdfs
raw device或者local fs
資料格式
使用者定義
系統決定
資料更新
不支援支援索引無
有執行mapreduce
executor
執行延遲高低
可擴充套件性高低
資料規模大小
•查詢語言:由於sql被廣泛的應用在資料倉儲中,因此,專門針對hive的特性設計了類sql的查詢語言hql。熟悉sql開發的開發者可以很方便的使用hive進行開發。
•資料儲存位置:hive是建立在hadoop之上的,所有hive的資料都是儲存在hdfs中的。而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。
•資料格式:hive中沒有定義專門的資料格式,資料格式可以由使用者指定,使用者定義資料格式需要指定三個屬性:列分隔符(通常為空格、"\t"、"\x001")、行分隔符("\n")以及讀取檔案資料的方法(hive中預設有三個檔案格式textfile、sequencefile以及rcfile)。由於在載入資料的過程中,不需要從使用者資料格式到hive定義的資料格式的轉換,因此,hive在載入的過程中不會對資料本身進行任何修改,而只是將資料內容複製或者移動到相應的hdfs目錄中。而在資料庫中,不同的資料庫有不同的儲存引擎,定義了自己的資料格式。所有資料都會按照一定的組織儲存,因此,資料庫載入資料的過程會比較耗時。
•資料更新:由於hive是針對資料倉儲應用設計的,而資料倉儲的內容是讀多寫少的。因此,hive中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用insert into...values新增資料,使用update...set修改資料。
•執行:hive中大多數查詢的執行是通過hadoop提供的mapreduce來實現的(類似select * from tbl的查詢不需要mapreduce)。而資料庫通常有自己的執行引擎。
•執行延遲:之前提到,hive在查詢資料的時候,由於沒有索引,需要掃瞄整個表,因此延遲較高。另外乙個導致hive執行延遲高的因素是mapreduce框架。由於mapreduce本身具有較高的延遲,因此在利用mapreduce執行hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,hive的平行計算顯然能體現出優勢。
•可擴充套件性:由於hive是建立在hadoop之上的,因此hive的可擴充套件性是和hadoop的可擴充套件性是一致的。而資料庫由於acid語義的嚴格限制,擴充套件性非常有限。目前最先進的並行資料庫oracle在理論上的擴充套件能力也只有100臺左右。
•資料規模:由於hive建立在集群上並可以利用mapreduce進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。
Hive 和資料庫的異同
摘要 由於 hive 採用了 sql 的查詢語言 hql,因此很容易將 hive 理解為資料庫。其實 從結構上來看,hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將 從多個方面來闡述 hive 和資料庫的差異。資料庫可以用在 online 的應用中,但是 hive 是為資料倉儲而設計的...
Hive資料倉儲與資料庫的異同
hive和資料庫除了擁有類似的查詢語言,再無類似之處。1.由於 hive 是針對資料倉儲應用設計的,而資料倉儲的內容是讀多寫少的。因此,hive 中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用 insert into valu...
資料庫儲存過程與函式的異同
定義上,儲存過程和函式沒有較大的區別,甚至他們有著一樣的優點 2 函式 有且必須有乙個返回值 語法a 建立 create function 函式名 引數列表 returns 返回型別 begin 函式體end 注意 1 引數包含兩部分 引數名 引數型別 2 函式體 肯定會有return語句,沒有就肯...