㈠ Hive 創建外部分區表
1、hive 創肢爛建外部表
create external table t_ods_test (
uid string COMMENT '用戶id',
terminal string COMMENT '終端類型',
adslotid string COMMENT '廣蔽或告位id',
cid string COMMENT 'cid',
amount string COMMENT '庫存量',
local string COMMENT '地域',
tags string COMMENT '標簽' )
partitioned by (year string,month string,day string) row format delimited fields terminated by '\t'
STORED AS TEXTFILE location '/user/qgw/hh/app/usertagview';
2、hive 外部表,增加分區
alter table t_ods_test add partition (year='2017', month='10', day='宏飢伍18') location '2017/10/18';
㈡ hive 外部表怎麼載入分區數據
hivesql sql — 獲取指定hive表或指定文件中脊山所有hive表的DDL,如果有按天的分區則默碧困認執行最近7天的分區DDL。同時,table支持符合sql語法櫻慧中的正則表達式,如果有多個表匹配,則提示用戶選擇(使用file則自動關閉該交互功能)。
㈢ hive外部表分區
內部表:
數據由hive自身管理 存儲在hive指定的hdfs目錄中 刪除會刪除數據本身
外部表(external):
數據存儲在用戶使用location關鍵字指定的hdfs目錄中 hive中僅存儲一份元數據 刪除操作不會影局鏈源響到hdfs中原本的數據文件
將hdfs中文件存儲在不同的目錄下 hive查詢時僅查詢指定目錄下的數據 避免掃描全部文件 可以極大的加速查詢 hive支持靜態分區和動態分區
靜態分區由用戶指定分區喚喊所在的目錄 而動態分區由表中的某一個欄位來決定每條數據所在的分區
創建了一桐態個bill表其中包含三個業務欄位
partitioned by (day int) 指定了day為分區標志 在查詢時使用 where day = 20201010 來指定分區
為bill表添加一個分區目錄20201010 當指定day = 20201010時 將在這個分區查詢數據
隨日期增加 需要手動將對應日期的目錄作為分區添加到bill中 可以使用crontab 每天自動執行一次添加分區的操作
㈣ Hive外表批量添加分區
我們有一批日誌數據存儲在hdfs上,按天創建目錄,如2018-07-31的日誌hdfs路徑為:/data/logs/gateway/20180731。
現在要用hive分析數據,同時要保證這些數並圓據目錄不能改變,就需要hive用外表的方式與這些數據氏蔽灶進行關殲扮聯。
示例:
但是,看下文件列表
一共108個待添加的目錄,這樣一個個添加太累人,有沒有批量添加的方法呢?
Hive有個MSCK命令,可以掃描數據分區目錄,修復元信息,目錄與元信息不一致時,能自動更新。
但是,數據目錄必須是Hive習慣路徑格式:
同時,建表時指定LOCATION為分區目錄的父目錄:
這時,用命令
即可自動把所有的數據按dt分區,添加到gateway_analysis中。
由於我們的目錄格式不符合,只能用ADD PARTITION的方式了。
為減少工作量,寫了個shell腳本,自動添加 /data/logs/gateway 目錄下所有的分區目錄到gateway_analysis表中: