前言
- 語法:
DROP TABLE [IF EXISTS] table_name [PURGE]; -- (Note: PURGE available in Hive 0.14.0 and later) -
- 洗掉此表的元資料和資料,如果配置了
Trash(沒有指定 PURGE),資料實際上會移動到.Trash/Current目錄,元資料完全丟失,
- 洗掉此表的元資料和資料,如果配置了
-
- 洗掉外部表時,表中的資料不會從檔案系統中洗掉,
-
- 當洗掉視圖參考的表時,不會給出警告(視圖關聯表被洗掉視為無效,必須由用戶洗掉或重新創建),
-
- 除此之外.當洗掉表時,將從元資料存盤中洗掉表資訊,并像通過
hadoop dfs -rm那樣洗掉原始資料,在許多情況下,這會導致表資料被移動到用戶主目錄中的.Trash檔案夾中;因此,錯誤洗掉表的用戶可以通過使用相同的模式重新創建表、重新創建任何必要的磁區,然后使用Hadoop手動將資料移回原位,從而恢復丟失的資料,此解決方案依賴于底層實作,因此可能隨時間或跨安裝發生更改;強烈建議用戶不要隨意洗掉表,
- 除此之外.當洗掉表時,將從元資料存盤中洗掉表資訊,并像通過
Version information: PURGE
The PURGE option is added in version 0.14.0 by HIVE-7100.
如果指定了 PURGE,則表資料不會轉到. trash /Current目錄,因此在出現錯誤的洗掉時無法恢復,清洗選項也可以通過表屬性 auto.purge 指定,清除(參見上面的TBLPROPERTIES),
在Hive 0.7.0或更高版本中,如果表不存在,DROP回傳一個錯誤,除非指定了 IF EXISTS,或者配置變數 hive.exec.drop.ignorenonexistent 設定為true,
- 題外話:`TRUNCATE TABLE table_name [PARTITION partition_spec];
- partition_spec:
- (partition_column = partition_col_value, partition_column = partition_col_value, ...)`
洗掉表或磁區中的所有行,如果啟用了檔案系統Trash ,這些行將被丟棄在指定目錄,否則它們將被洗掉(從Hive 2.2.0 with Hive-14626開始),當前目標表應該是本地/管理表,否則將引發例外,用戶可以指定部分 partition_spec來一次 TRUNCATE 多個磁區,省略partition_spec將 TRUNCATE 表中的所有磁區,
從HIVE 2.3.0 (HIVE-15880)開始,如果表屬性auto.purge(參見上面的TBLPROPERTIES)設定為true,當對表發出 TRUNCATE TABLE 命令時,表的資料不會被移動到Trash,并且資料無法恢復,這只適用于管理表,如果管理表沒有設定auto.purge屬性或者設定為false這個功能被關閉,
了解下dorp命令在hdfs中的操作:
dorp命令在HDFS中的操作,其實也是hdfs dfs -rm洗掉到hdfs中的檔案.如果hdfs中開啟了洗掉放入回收站操作.那么就可以恢復的.
開始操作
-
- 創建一張與源表相同的表
CREATE TABLE `user`(
`locationareaid` bigint,
`locationareaname` string
)
PARTITIONED BY (
`dt` string)
row format delimited fields terminated by '\t' line terminated by '\n' stored as textfile;
-
- 從回收站中復制(移動)洗掉的檔案
hdfs dfs -cp /user/hadoop/.Trash/Current/user/hive/warehouse/user/dt=2019-10-161571499856584 /user/hive/warehouse/user
-
- 把檔案加載到
hive中
方案一 將臨時目錄下的資料load到表中:
- 把檔案加載到
load data inpath '/user/hive/warehouse/user/dt=2019-10-171571499859193/part-m-00000' into table user PARTITION (dt='2019-10-171571499859193');
方案二 如果磁區過多的話.方案一會很耗時可以是用msck repair table 操作來加載磁區,在執行命令前,
注意:一定保證磁區所處的位置是正確的.
msck repair table user
- 驗證資料
select * from user where dt='2019-10-171571499859193'
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247037.html
標籤:Java
