[root@hadoop001 hivedata]# hadoop fs -get /user/hive/warehouse/emp_dept_partition/deptno=30/000000_0 emp_dept_partition-deptno30
[root@hadoop001 hivedata]# ls
dept emp_dept_partition-deptno30 emp.txt
hive> alter table emp_dept_partition drop if exists partition(deptno=30);
dropped the partition deptno=30
oktime taken: 0.652 seconds
hive> select * from emp_dept_partition where deptno=30;
oktime taken: 0.507 seconds
deptno=30分割槽對應的資料夾也不存在了。
[root@hadoop001 hivedata]# hadoop fs -ls /user/hive/warehouse/emp_dept_partition/
found 2 items
drwxr-xr-x - root supergroup 0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=10
drwxr-xr-x - root supergroup 0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=20
[root@hadoop001 hivedata]# hadoop fs -mkdir /user/hive/warehouse/emp_dept_partition/deptno=30
[root@hadoop001 hivedata]# hadoop fs -put emp_dept_partition-deptno30 /user/hive/warehouse/emp_dept_partition/deptno=30
[root@hadoop001 hivedata]# hadoop fs -cat /user/hive/warehouse/emp_dept_partition/deptno=30/emp_dept_partition-deptno30
7499 allen salesman 7698 1981/2/20 1600.0 300.0
7521 ward salesman 7698 1981/2/22 1250.0 500.0
7654 martin salesman 7698 1981/9/28 1250.0 1400.0
7698 blake manager 7839 1981/5/1 2850.0 \n
7844 turner salesman 7698 1981/9/8 1500.0 0.0
7900 james clerk 7698 1981/12/3 950.0 \n
[root@hadoop001 hivedata]#
hive> select * from emp_dept_partition where deptno=30;
oktime taken: 0.116 seconds
語法:alter table table_name add [if not exists] partition partition_spec [location 『location』][, partition partition_spec [location 『location』], …];
hive> alter table emp_dept_partition add if not exists partition (deptno=30);
oktime taken: 0.209 seconds
hive> select * from emp_dept_partition where deptno=30;
ok7499 allen salesman 7698 1981/2/20 1600.0 300.0 30
7521 ward salesman 7698 1981/2/22 1250.0 500.0 30
7654 martin salesman 7698 1981/9/28 1250.0 1400.0 30
7698 blake manager 7839 1981/5/1 2850.0 null 30
7844 turner salesman 7698 1981/9/8 1500.0 0.0 30
7900 james clerk 7698 1981/12/3 950.0 null 30
time taken: 0.168 seconds, fetched: 6 row(s)
我們平時通常是通過alter table add partition方式增加hive的分割槽的,但有時候會通過hdfs put/cp命令往表目錄下拷貝分割槽目錄,如果目錄多,需要執行多條alter語句,非常麻煩。hive提供了乙個"recover partition"的功能。
具體語法如下:
msck repair table table_name;
原理相當簡單,執行後,hive會檢測如果hdfs目錄下存在但表的metastore中不存在的partition元資訊,更新到metastore中。
測試
#當前沒有partition元資訊
hive> show partitions cr_cdma_bsi_mscktest;
oktime taken: 0.104 seconds
#建立兩個分割槽目錄
hive> dfs -mkdir /user/hive/warehouse/cr_cdma_bsi_mscktest/month=201603;
hive> dfs -mkdir /user/hive/warehouse/cr_cdma_bsi_mscktest/month=201604;
#使用msck修復分割槽
hive> msck repair table cr_cdma_bsi_mscktest;
okpartitions not in metastore: cr_cdma_bsi_mscktest:month=201603
partitions not in metastore: cr_cdma_bsi_mscktest:month=201604
repair: added partition to metastore cr_cdma_bsi_mscktest:month=201603
repair: added partition to metastore cr_cdma_bsi_mscktest:month=201604
time taken: 0.286 seconds, fetched: 2 row(s)
#再次檢視,發現已經成功更新元資訊
hive> show partitions cr_cdma_bsi_mscktest;
okmonth=201603
month=201604
time taken: 0.102 seconds, fetched: 1 row(s)
直接建立分割槽表的分割槽的資料夾,並上傳對應分割槽的資料檔案後,這些資料都是手動新增的,所以mysql並無記錄對應分割槽的元資料,所以hive不能查詢對應的結果。
需要在hive重新整理分割槽資訊(說白了就是想儲存元資料的資料庫新增分割槽資料)。
etcd 刪除後重新插入,版本號重新計數
在etcd中,資料刪除後重新插入,對應的版本號重新計算,測試 如下 etcdctl endpoints put k1 v1 w json etcdctl endpoints put k1 v11 w json etcdctl endpoints put k1 v111 w json etcdctl ...
hive分割槽表刪除部分資料
1 hive表刪除資料不能使用delete from table name 的sql語句 2 hive表刪除資料要分為不同的粒度 table partition 一 有partition表 刪除具體partition alter table table name drop partition par...
hive刪除表或分割槽但是HDFS裡面資料還在
僅在這裡說一下自己遇到的問題,以及解決方案。不保證正確。在spark裡面建立了乙個分割槽表,刪除分割槽後匯入新的資料到相同分割槽。發現有兩份資料。後來排查,刪除分割槽後,在hive裡面看不到分割槽了,但是在hdfs裡面資料仍然存在,所以當相應分割槽重新建立時,hdfs裡的資料又能查詢到了。trunc...