【Hive】:簡介與基本使用
hive簡單來說,就是一個用來查詢hadoop當中(hdfs)資料的一個工具。它的結構如下:
hive當中有一部分用來儲存元資料,也就是metadata,這些metadata包含了hadoop當中的資料表的schema,比如說一個表的所有列名稱,欄位,型別。以及有哪些表table已經被hdfs所儲存。
而這些資料儲存在hive自身的資料庫當中,hive中metadata的資料庫一般使用的是mysql進行儲存,或者使用自帶的derby資料庫進行儲存。
Hive當中還有一個比較重要的部分則是Driver,Driver的作用主要是:將hql(類似於sql的statement)翻譯成mapreduce,或者將其翻譯成shell命令。
同時hive是一個數據倉庫工具,它並沒有分散式叢集的概念,如是使用hive提交作業,可以將其提交到hadoop上的master slave上面就好。hive和我們的mapreduce有一定的區別,hive只是用來寫hql的,而mapreduce可以實實在在地做離線分散式計算。
二. Hive和關係型資料庫的區別
區別如下圖所示:
hive還具備關係型資料庫所不具備的內部表和外部表,內部表一般儲存在hive的內部,預設為/user/hive/warehouse,外部表一般儲存在hdfs當中,並且由hdfs來管理。外部表建立的時候有external關鍵字。
三.分割槽表
hive當中還有一種表,也就是分割槽表。也就是說,同一個表,可以用多個分割槽來進行表示。
使用分割槽表的原因:
當資料量比較大的時候,可以使用分割槽表對資料進行劃分,縮小查詢資料的範圍。
分割槽表實際上就是在表的目錄下建立的子目錄。
如果有分割槽表進行查詢的時候,要儘量使用分割槽的欄位。
比如我們可以按照日期來劃分分割槽表,這樣我們就可以單獨檢視某一天的所有資料。
建立分割槽表:
create table t1( id int ,name string ,hobby array<string> ,add map<String,string> ) partitioned by (pt_d string) row format delimited fields terminatedby ',' collection items terminated by '-' map keys terminated by ':' ;