hive開發中對分割槽的各種操作詳解
表的分割槽欄位一般都是在建表的時候就已經設定好了。當然給表刪除和增加分割槽前首先要知道表中分割槽有哪些,有沒有分割槽,分割槽的欄位有哪些?可以使用如下命令來查看錶中的所有分割槽。
hive (fdm_sor)> show partitions mytest_tmp; OK partition
說明:如果表裡沒有新增資料的話,是不會顯示具體分割槽欄位名的,要想知道表中具體分割槽欄位名,可用describe formatted table_name
此外,show partitions FDM_SOR.mytest_deptaddr partition(statis_date='20180303'),可以檢視指定分割槽
語法結構([]括號內屬於可選的配置)
ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...
partition_spec:
: PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
ALTER TABLE table_nameDROPpartition_spec, partition_spec,...
具體例項演示:給表增加分割槽
hive (fdm_sor)> alter table mytest_tmp add partition(statis_date='20180304');
OK
1.給表增加或者刪除分割槽,前提建立表時已經定義了分割槽欄位statis_date.否則增加不了分割槽。同理在建表時定義分割槽欄位,才可以drop分割槽,否則會報錯。
2.如果給外部表(external table)增加分割槽時,要制定location。即儲存位置。
alter table abc add partiton(year='2018',moth='03') location 'hdfs://user/data/2018/03'
hive (fdm_sor)> show partitions mytest_tmp;
OK
partition
statis_date=20180304
在給表刪除分割槽時,要注意,如果刪除一個不存在的分割槽,並不會報錯,如下刪除一個不存在的分割槽。
hive (fdm_sor)> alter table mytest_tmp drop partition(statis_date='2018030005');
OK
3.建立表時給表新增分割槽欄位
CREATE TABLE `FDM_SOR.mytest_deptaddr`(
`dept_no` int,
`addr` string,
`tel` string)
partitioned by(statis_date string,location string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
上面建表時,給表增加了分割槽,而且分割槽欄位是兩個欄位。在hdfs上面的表現就是statis_date資料夾下還有一個子資料夾location.多個分割槽欄位,相當於多層檔案目錄。
4.關於分割槽的表操作的注意事項
1. 一般來說,查詢分割槽表時,一定會在where子句中加上分割槽條件,指明檢視哪個分割槽的資料。否則會報錯。因為預設set hive.mapred.mode=strict.即嚴格模式。如果set hive.mapred.mode=nostrict.可以查詢分割槽表時不帶分割槽宣告,這個時候會返回整張表的所有資料。
2.往分割槽表中load資料或者匯出資料時,要指定分割槽。
load data local inpath'/home/robot/111.txt'
overwrite into table FDM_SOR.mytest_deptaddr partition(statis_date='20180228')