Hive

是什么

  • 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,.......>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容