一、引言:
快下班的時候我開發同事問能不能將hive中drop掉的數據恢復過來,我記得是有開回收站的,當時我回答說可以恢復的。
二、恢復過程:
在之前我有對hadoop的回收站有過了解,就是將hdfs dfs -rm刪除掉的文件進行恢復,只需要hdfs dfs -mv將文件從回收站中搬過來就行,我就先使用這個方法,但是效果不佳,執行select count(*) from table_name,得到的結果為0。這個時候我想到這個表被drop掉以后在mysql的元數據庫中已經沒有數據了,那就得需要將這些數據的信息重新寫入到mysql中。具體恢復步驟如下:
1、創建表:
CREATE TABLE temp_richard( op_time string, province_id string, pay_type string, client_type string, index_id string, index_value bigint ) PARTITIONED BY (dayid string) stored as rcfile location '/dw/tmp/temp_richard';
2、將回收站中的數據cp出來一份:
hdfs dfs -cp /user/hadoop/.Trash/Current/dw/dm/tmp_richard /tmp/richard/
3、將臨時目錄下的數據load到表中:
load data inpath '/tmp/zhulh/dayid=20160101/000000_0' into table tmp_richard PARTITION (dayid='20160101');
備注:這里需要將每個分區的數據load到相應的分區表中。
4、驗證數據:
hive> select count(*) from tmp_richard;
三、重點說明:
hive 中使用truncate命令將表截斷的話,它是不會進回收站的,是沒辦法恢復的。這個跟oracle truncate有點類似的。