hive外部表建立分割槽,並根據分割槽進行查詢
阿新 • • 發佈:2019-01-07
1. hive建立外部表
建立外部表的好處:
hive建立外部表時,僅記錄資料所在的路徑,不對資料的位置做任何改變.
刪除表的時候,外部表只刪除元資料,不刪除資料
所以總結起來就是 : 外部表相對安全,資料組織更加靈活,方便共享源資料
建表語法
CREATE EXTERNAL TABLE IF NOT EXISTS 表名 ( 列名1 資料型別, . . . . 列名n 資料型別 ) PARTITIONED BY (分割槽依據 資料型別) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' -- 指定資料之間的分隔符 COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' -- 指定換行符 LOCATION 'hdfs資料目錄'; -- 載入的hdfs資料目錄
舉例 :
CREATE EXTERNAL TABLE IF NOT EXISTS outhighsampleTest1115xmr ( Column_1 SMALLINT, . . . . -- 列數太多,中間的列省略掉 Column_111 STRING ) PARTITIONED BY (hour_p int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' LOCATION '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/';
2. 為外部表新增分割槽
為什麼需要分割槽?
舉例 : 一個表裡儲存了一天的資料,但是很多時候,我們只想查詢其中的一個小時
而為了這一個小時的資料取掃描全表,是相當耗時的操作
因此,我們建表的時候指定partition
就可以在後續的應用的過程中為表格新增合適的分割槽
分割槽語法
alter table 表名 add partition (分割槽依據='分割槽名') location 'hdfs路徑';
-- 注意 : 這裡的分割槽依據要和建表時指定的分割槽依據保持一致
在我之前建表引入的hdfs目錄下,有5個子目錄,我就以這5個子目錄來建立分割槽
語句如下:
alter table outhighsampleTest1115xmr add partition (hour_p='01') location '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/01'; alter table outhighsampleTest1115xmr add partition (hour_p='02') location '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/02'; alter table outhighsampleTest1115xmr add partition (hour_p='03') location '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/03'; alter table outhighsampleTest1115xmr add partition (hour_p='04') location '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/04'; alter table outhighsampleTest1115xmr add partition (hour_p='05') location '/mt_wlyh/Data/BeiJing/mroxdrmerge/mro_loc/data_01_180125_bak/tb_mr_outsample_high_dd_180125/05';
3. 通過分割槽進行查詢
首先查詢分割槽表的分割槽狀態
語法 : show partitions 表名;
舉例 : show partitions outhighsampleTest1115xmr;
查詢
分割槽表進行查詢和普通的hql 沒什麼區別的!
如下圖所示 :
支援通過分割槽進行的
=, != , > < , in, 以及組合查詢!!
能有效的提高查詢效率
4.幾個坑
1.建表時報錯
2. 為表格新增分割槽失敗
報錯資訊 : Error while compiling statement: FAILED: ValidationFailureSemanticException
table is not partitioned but partition spec exists: {hour_p=05}
報錯資訊含義 : 建立分割槽失敗,表格並不是一個分割槽表
解決方法 : 在建表時指定表格為分割槽表
指定方式建表語句加上 PARTITIONED BY (分割槽依據 資料型別)
即可為該表建立分割槽!
5. 軟體安利
Aginity Workbench for Hadoop
用該軟體來操作hdfs和hive簡直不要太方便!
舉例 : 我想建立一個hdfs上檔案到hive的外部表對映,但是這個hdfs檔案裡面有很多列,敲起來累死人, 而且語法也記不住怎麼辦?
沒關係,該軟體幫你輕鬆解決!!
點選Tools–>FileShells–>Hdfs File Explorer
設定好hdfs連線,選擇好檔案點選Create Hive Table
點選select-->設定好hive連線和埠號--> OK
接下來,點選next進行設定, 在修改下表名什麼的,就OK啦
.... 最後,這個語句會出現在窗口裡,點選下execute執行就建立成功了!!! 操作熟練後只是點幾下滑鼠,我們想要的表就出來了
當然,這只是這款軟體的一個小功能而已,還有更多很好的,實用的功能,用過的都說好~~~