是什么
- Hive是一個SQL解析引擎,將SQL語句轉(zhuǎn)譯成MapReduce Job,然后在Hadoop平臺上運(yùn)行,達(dá)到快速開發(fā)的目的。
- Hive中的表是純邏輯表,表的定義(元數(shù)據(jù))。本質(zhì)就是Hadoop的目錄/文件,達(dá)到了元數(shù)據(jù)和數(shù)據(jù)存儲分離的目的
- Hive本身不存儲數(shù)據(jù),完全依賴HDFS和MapReduce,數(shù)據(jù)實(shí)際存在HDFS,元數(shù)據(jù)基本存在Mysql
- Hive內(nèi)容讀多寫少,不支持對數(shù)據(jù)的改寫和刪除
- Hive中沒有定義專門的數(shù)據(jù)格式,由用戶指定
- 列分隔符:空格,\t,\001
- 行分隔符:\n
為什么

Hive中的SQL與傳統(tǒng)SQL區(qū)別
- 可擴(kuò)展性
- UDF:用戶自定義普通函數(shù),直接應(yīng)用于select語句,通常查詢的時候,需要對一些字段進(jìn)行處理(大小寫處理等),特點(diǎn)就是一進(jìn)一出,一對一的場景
- UDAF:用戶自定義聚合函數(shù),適用于多對一的場景(group by)
- UDTF:用戶自定義表生成函數(shù),適用于一對多場景(split)
- 數(shù)據(jù)檢查
- 讀時模式:
只有hive讀的時候才會檢查,解析字段和數(shù)據(jù)結(jié)構(gòu)表達(dá)(scheme)
優(yōu)點(diǎn):寫數(shù)據(jù)很迅速,因為在寫的過程中不需要數(shù)據(jù)解析 - 寫時模式:
缺點(diǎn):寫的慢,需要對數(shù)據(jù)進(jìn)行建立索引,壓縮、數(shù)據(jù)一致性、字段檢查等等
優(yōu)點(diǎn):讀的時候會得到優(yōu)化
- 讀時模式:
有什么
架構(gòu)
語句轉(zhuǎn)換
- 解析器:生成抽象語法樹
- 語法分析器:驗證查詢語句
- 邏輯計劃生成器(包括優(yōu)化器):生成操作符樹
- 查詢計劃生成器:轉(zhuǎn)換為MapReduce任務(wù),hive本身不會生成MapReduce,而是通過執(zhí)行查詢計劃來執(zhí)行mapr(xml文件---mapper,reduce模塊)
數(shù)據(jù)存儲/管理
- hive表的本質(zhì)就是Hadoop的目錄/文件,hive默認(rèn)表存放路徑一般在工作目錄的hive目錄里面,按表名做文件夾分開
元數(shù)據(jù)(mysql) + 實(shí)際數(shù)據(jù)(HDFS):
1.默認(rèn)derby:本地,單用戶模式
2.建mysql:多用戶模式(本地+遠(yuǎn)程) - Hive語句生成查詢計劃,由MapReduce調(diào)用執(zhí)行
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)表
- 內(nèi)部表(table):表刪除,內(nèi)部數(shù)據(jù)也刪除
- 外部表(external table):表刪除,內(nèi)部數(shù)據(jù)不刪除
- 建議使用外部表,刪除之后重建表,數(shù)據(jù)自動恢復(fù)
分區(qū)表(partition)
有限范圍內(nèi)的分區(qū),按照日期等分區(qū),輔助查詢,縮小查詢范圍,加快數(shù)據(jù)檢索速度
分桶表(bucket)
- hive會針對某一列進(jìn)行桶的組織,通常對列值hash(取模分桶號)
- 分桶時需要先執(zhí)行set hive.enforce.bucketing=true
- 優(yōu)點(diǎn):
- 優(yōu)化查詢:把兩個大表的join分成了小表join,會自動激活map端的map-side-join
- 方便取樣:可以在大規(guī)模數(shù)據(jù)中取小部分進(jìn)行采樣分析
- 采樣
- 語法:tablesample是抽樣語句,TABLESAMPLE(BUCKET x OUT OF y)
- 示例:select * from student tablesample(bucket 1 out of 2 on id)
- 解析:y必須是table總bucket數(shù)的倍數(shù)或者因子。例如,table總bucket數(shù)為32,tablesample(bucket 3 out of 16),表示總共抽取(32/16=)2個bucket的數(shù)據(jù),分別為第3個bucket和第(3+16=)19個bucket的數(shù)據(jù)
數(shù)據(jù)類型
- 原生類型
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- STRING
- BINARY(Hive0.8.0以上才可用)
- TIMESTAMP(Hive0.8.0以上才可用)
- 復(fù)合類型
- Arrays:ARRAY<data_type>
- Maps:Map<Key,Value>
- Structs:STRUCT<col_name:data_type>
- Union:UNIONTYPE<data_type,data_type,.......>