Hive是什么
Hive是基于Apache Hadoop的數據倉庫。Hadoop提供了在商用硬件上存儲和處理大量數據的能力,并且具有容錯機制。
Hive能夠讓大數據的匯總,即時查詢和分析變得更加簡單。Hive提供了SQL,用戶可以很方便地進行即時查詢,數據匯總和分析。同時,Hive的SQL給用戶提供了很多空間去集成定制的分析功能,如User Defined Functions (UDFs)。
Hive不是什么
Hive不適合用于在線事務處理。Hive最適合用于傳統的數據倉庫任務。
入門
安裝Hive,HiveServer2和Beeline的詳細介紹,請參見GettingStarted。
Books about Hive羅列了一些Hive入門的書籍。
數據單元
按照粒度的順序,Hive數據組織如下:
- Databases:起到命名空間的作用,用于避免表,視圖,分區和列等發生命名沖突。數據庫也用于對用戶或用戶組實行安全性控制。
-
Tables:擁有相同模式的數據單元。如
page_views
表,每一行都包含了下面的列(模式):- timestamp—INT類型,對應于瀏覽頁面的UNIX時間戳。
- userid—BIGINT類型,瀏覽頁面的用戶標識。
- page_url—STRING類型,頁面的url。
- referer_url— STRING類型,用戶從哪個頁面訪問到當前頁面。
- IP—STRING類型,訪問頁面的IP地址。
-
Partitions:每個表都可以有一個或多個partition keys,用于確定數據如何存儲。除了存儲單元之外,分區還允許用戶有效地識別滿足特定標準的行;例如,STRING類型的date_partition和country_partition。partition keys的每個唯一值都定義了表的一個分區。例如,所有從"2009-12-23"開始的"US"數據就是
page_views
表的一個分區。因此,如果只想分析"2009-12-23"的"US"數據,可以只對表的相關分區進行查詢,從而大大加快分析的速度。需要注意的是,命名為"2009-12-23"并不代表它包含了從該日期起的所有數據或者只有該日期的數據;為了方便,分區用日期命名;保證分區名稱和數據內容之間的關系是用戶的工作!分區列是虛擬列,它們并不是數據本身的一部分,但是會在加載時派生出來。 -
Buckets(or Clusters):每個分區的數據可能會根據表中某些列的哈希值依次劃分到Buckets中。例如,
page_views
表可能會用userid劃分bucket,userid是page_views
表的一列,不是分區列。Buckets可用于有效地抽樣數據。
表不是必須進行分區或分桶,但是這些抽象可以使讓系統在處理查詢時修剪掉大量數據,從而更快地執行查詢。
類型系統
Hive支持基本數據類型和復雜數據類型,如下所述。查看Hive Data Types可以得到更多信息。
基本類型
類型與表中的列相關聯,下面是Hive支持的基本類型:
- 整數
- TINYINT—1字節整數
- SMALLINT—2字節整數
- INT—4字節整數
- BIGINT—8字節整數
- 布爾值
- BOOLEAN— TRUE/FALSE
- 浮點數
- FLOAT— 單精度浮點數
- DOUBLE— 雙精度浮點數
- 定點數
- DECIMAL— 用戶定義的定點值
- 字符串
- STRING— 特定字符集的字符序列
- VARCHAR— 特定字符集的字符序列,可設置最大長度
- CHAR— 特定字符集的字符序列,可設置固定長度
- 日期和時間
- TIMESTAMP— 特定時間點,可達到納秒精度
- DATE— 日期
- 二進制
- BINARY— 字節序列
復雜類型
復雜類型可以從基本類型和其它組合類型構建:
- Structs:其中的元素使用(.)來訪問。如,STRUCT {a INT; b INT}類型的列c,使用c.a訪問其中的字段。
- Maps(key-value元組):其中的元素使用 ['element name']來訪問。如,M是包含了'group' -> gid的映射,gid的值用M['group']訪問。
- Arrays(帶索引的列表):其中的元素都是相同類型的。使用[n]訪問元素,n是從0開始的數組索引。如,數組A為['a', 'b', 'c'],A1就是'b'。
使用基本類型和結構體來創建復雜類型,任意層級嵌套的類型都可以創建。如,User類型可能包含下面的字段:
- gender—字符串
- active—布爾值