機制:TDH里面數據刪除之后,會在hdfs下面生成delta的文件,該文件在下次該表修改時候進行刪除compact合並
也就是說我們要在compact之前,刪除delta即可恢復到最新的一次版本
--比如新建一個分糖數為3的orc事務表,新建成功之后,存在一個delta版本,下面存在3個bucket文件
SELECT * FROM emp_like01;
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000061_0000061
--執行一次刪除操作,可以看到表名目錄下新生成一個delta目錄版本
DELETE FROM emp_like01 WHERE EMPNO=7521;
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064
--將這個delta目錄刪除,即可以恢復
dfs -rm -r -f hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064
SELECT * FROM emp_like01;
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000061_0000061
--執行一次刪除操作,可以看到表名目錄下新生成一個delta目錄版本
DELETE FROM emp_like01 WHERE EMPNO=7521;
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064
--將這個delta目錄刪除,即可以恢復
dfs -rm -r -f hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064
執行結果:
Moved: 'hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064' to trash at: hdfs://nameservice1/user/hive/.Trash/CURRENT
Moved: 'hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/delta_0000064_0000064' to trash at: hdfs://nameservice1/user/hive/.Trash/CURRENT
SELECT * FROM emp_like01; 你會發現 之前的數據還會存在
--再次做刪除操作
DELETE FROM emp_like01 WHERE EMPNO=7521;
--表名目錄下新生成一個delta文件夾
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/
--嘗試手動compact並等待合並結束
alter table emp_like01 compact 'major' and wait;
--可以看的目錄下就剩下一個base目錄,base目錄下只有3個bucket文件,無法恢復了
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/
dfs -ls hdfs://nameservice1/inceptor1/user/hive/warehouse/default.db/hive/emp_like01/base_0000066