Hive指南
概念
什麼是Hive
Hive是一個基於Hadoop的數據倉庫基礎架構。Hadoop爲在普通的硬件環境上數據的存儲和處理提供了巨大的水平擴展能力和容錯能力。
Hive被設計用來更容易進行數據彙總,臨時查詢和分析巨大的數據。它提供一個簡單的查詢語言Hive QL,基於SQL使用用戶熟悉的SQL做臨時查詢、統計和數據分析更容易。同時,Hive QL也允許傳統的map/reduce程序員能夠插入他們自定義的mappers和reducers做更多複雜的分析,這些功能可能HQL內置功能並不支持。
Hive不是什麼
Hadoop是一個批處理系統,Hadoop的任務基本是高延遲,並且在任務提交和安排上有大的開銷。結果--Hive的查詢通常延時非常高(分鐘級別),既使數據集包含的數據量非常小(只有幾百MB)。As a result it cannot be compared with systems such as Oracle where analyses are conducted on a significantly smaller amount of data but the analyses proceed much more iteratively with the response times between iterations being less than a few minutes. Hive aims to provide acceptable (but not optimal) latency for interactive data browsing, queries over small data sets or test queries.
Hive不是被設計作爲在線事務處理和不離線實時查詢及低級的更新的。它最佳的用處是超大不變數據集進行批處理工作(象web日誌)
下面的章節我們提供系統功能的指南。我們開始講解數據類型,表和分區的概念,HQL語言功能的一些例子幫助。
數據單位
按粒度順序--Hive數據組織如下:
- 數據庫:分隔表和其它數據單元避免名稱衝突的特定名稱空間。
- 表:擁有相同schema均勻的數據單位。一個數據表的例子是page_views表,每行包含下面的列(schema):
timestamp - 一個INT類型,相當於一個unix的timestamp。
userid - 一個BIGINT類型,當一個頁被訪問時代表用戶的標識符。
page_url - STRING類型,訪問時的位置
referer_url - STRING類型
IP - STRING類型
- 分區 :每個表能有一個或多個分區鍵決定數據如何存儲。
- 存儲桶(或集羣):一個表相同列的每個分區裏的數據可能基於一個hash函數的值被分隔到不同的存儲桶裏。
系統類型
基本類型
- 類型是與表中的列相關聯的,支持下列基本類型:
- Integers
- TINYINT - 1字節integer
- SMALLINT - 2字節integer
- INT - 4字節integer
- BIGINT - 8字節integer
- Boolean類型
- BOOLEAN - TRUE/FLASE
- Floating
- FLOAT - 單精度
- DOUBLE - 雙精度
- STRING類型
- STRING - 指定字符集的字符序列
複合類型
複合類型能使用基本類型構建和其它組合類型:
- 結構:類型元素能使用.訪問。例如,一個列c的類型是結構{a INT; b INT}訪問a字段的表達式爲c.a
- 映射(key-value元組):元素使用['元素名']符號訪問。
- 數組(可索引的列表):在數據裏的元素有相同的類型,每個元素可以使用[n]符合訪問。