hive指南
hive是什么?
hive是基于hadoop構建的數據倉庫基礎架構,通過提供一系列的工具,使得用戶能夠方便的做數據ETL,數據結構化,并針對存放在hadoop上的海量數據進行查詢和分析。
hive定義了一種簡單的類SQL查詢語言---QL,QL語言方便熟悉SQL語言的用戶去查詢數據。此外,hive也支持熟悉map-reduce的開發者使用map-reduce程序對數據做更加復雜的分析。
hive可以很好的結合thrift和控制分隔符,也支持用戶自定義分隔符。
hive不是什么?
hive基于hadoop,hadoop是批處理系統,不能保存低延遲,因此,hive的查詢也不能保證低延遲。
hive的工作模式是:提交一個任務,等到任務結束時被通知,而不是實時查詢。相對應的是,類似于oracle這樣的系統當運行于小數據集的時候,響應非 常快,可當處理的數據集非常大的時候,可能需要數小時。需要說明的是,hive即使在很小的數據集上運行,也可能需要數分鐘才能完成。
總之,低延遲不是hive追求的首要目標。hive的設計目標是:可伸縮、可擴展、容錯及輸入格式松耦合
數據單元
按照數據粒度大小,hadoop可以被組織成:
1. databases: 避免不同表產生命名沖突的一種命名空間
2. tables:具有相同scema的同質數據的集合
3. partitions:一個表可以有一個或多個決定數據如何存儲的partition key
4. buckets(clusters):在同一個partition中的數據可以根據某個列的hash值分為多個bucket
partition和bucket并非必要,但是,它們能大大加快數據的查詢速度
數據類型
簡單類型:
TINYINT - 1 byte integer
SMALLINT - 2 byte integer
INT - 4 byte integer
BIGINT - 8 byte
BOOLEAN - TRUE/ FALSE
FLOAT - 單精度
DOUBLE - 雙精度
STRING - 字符串集合
復雜類型:
Structs: structs內部的數據可以通過DOT(.)來存取,例如,表中一列c的類型為STRUCT{a INT; b INT},我們可以通過c.a來訪問域a
Maps(K-V對):訪問指定域可以通過["指定域名稱"]進行,例如,一個Map M包含了一個group-》gid的kv對,gid的值可以通過M['group']來獲取
Arrays:array中的數據為相同類型,例如,假如array A中元素['a','b','c'],則A[1]的值為'b'
語言能力
hive查詢語言提供基本的類sql操作,這些操作基于table和partition,包括:
1.使用where語句過濾制定行
2.使用select查找指定列
3.join兩張table
4.group by
5. 一個表的查詢結果存入另一張表
6.將一個表的內容存入本地目錄
7.將查詢結果放在hdfs上
8.管理table和partition(creat、drop、alert)
9.在查詢中嵌入map-reduce程序
譯自:https://cwiki.apache.org/confluence/display/Hive/Tutorial