1. 程式人生 > 其它 >【Hive】:簡介與基本使用

【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 terminated 
by ',' collection items terminated by '-' map keys terminated by ':' ;