1. 程式人生 > >Hive常用分割槽操作命令20180805

Hive常用分割槽操作命令20180805

環境:hadoop-2.7 , hive 2.1

操作hive資料倉庫中的表有個前提,就是被操作的表必須是有分割槽的。需要在建表的時候指定分割槽,具體如何建立有分割槽的表,請看我的另一篇文章 《在hive中建立分割槽表,再關聯到hdfs有關位置,而不需匯入資料到hive表》

在linux命令列對指定的表以迴圈方式插入分割槽

for d in “4 5”; do hive -e “ALTER TABLE machine_logs.uniform_id ADD IF NOT EXISTS PARTITION (dt=‘2018-08-0$d’)”;echo ------ ; done

Logging initialized using configuration in file:/etc/hive/2.5.0.0-1245/0/hive-log4j.properties
OK
Time taken: 3.087 seconds
------

顯示執行成功了,但是我語法出問題,實際效果卻是:

[[email protected] ~]# hive -e "show partitions gz_logs.uniform_payment;"
… (省略)
dt=2018-07-29
dt=2018-07-30
dt=2018-07-31
dt=2018-08-01
dt=2018-08-02
dt=2018-08-03
dt=2018-08-04 5

在Linux命令列更正,使用DROP PARTITION

hive -e "ALTER TABLE gz_logs.uniform_payment DROP IF EXISTS PARTITION (dt='2018-08-04 5')"
Logging initialized using configuration in file:/etc/hive/2.5.0.0-1245/0/hive-log4j.properties
Dropped the partition dt=2018-08-04 5
OK
Time taken: 4.271 seconds
[
[email protected]
~]# hive -e "ALTER TABLE gz_logs.uniform_payment ADD IF NOT EXISTS PARTITION (dt='2018-08-04')" Logging initialized using configuration in file:/etc/hive/2.5.0.0-1245/0/hive-log4j.properties OK Time taken: 2.624 seconds [[email protected] ~]# hive -e "ALTER TABLE gz_logs.uniform_payment ADD IF NOT EXISTS PARTITION (dt='2018-08-05')" Logging initialized using configuration in file:/etc/hive/2.5.0.0-1245/0/hive-log4j.properties OK Time taken: 3.022 seconds

檢視結果,正確✔️

…(省略)
dt=2018-07-29
dt=2018-07-30
dt=2018-07-31
dt=2018-08-01
dt=2018-08-02
dt=2018-08-03
dt=2018-08-04
dt=2018-08-05

批量修復錶的歷史分割槽

前面都是單獨新增一個分割槽的,批量修復錶的歷史分割槽使用MSCK
在hive shell中使用MSCK REPAIRT TABLE db_name.table_name;
或者在Linux命令列使用hive –e “MSCK REPAIRT TABLE db_name.table_name;”

或者,某個表有多個分割槽,分割槽對應到HDFS目錄層次為 {table_name}/pid/cid/dt

# 分別為此表pid為00、10、20...90且cid=5 新增7月1號和2號的分割槽,例如{table_name}/20/cid=5/dt=2018-07-01
for p in {'00','10','20','30','40','50','60','70','80','90'}
  do hive -e "ALTER TABLE orders.active ADD IF NOT EXISTS PARTITION (pid=$p, cid='5', dt='2018-07-01');
  ALTER TABLE dawn_v3.stat_active ADD IF NOT EXISTS PARTITION (p=$p, cid='5', dt='2018-07-02');"
done