REPAIR TABLE
說明
REPAIR TABLE
會復原資料表目錄中的所有分割區,並更新 Hive 元資料儲存庫。在使用 PARTITIONED BY
子句建立資料表時,會產生分割區並註冊至 Hive 元資料儲存庫。不過,如果分割資料表是由現有資料建立,分割區不會自動註冊至 Hive 元資料儲存庫。使用者需要執行 REPAIR TABLE
來註冊分割區。對不存在的資料表或沒有分割區的資料表執行 REPAIR TABLE
會擲回例外狀況。復原分割區的另一種方法是使用 ALTER TABLE RECOVER PARTITIONS
。為了相容於 Hive,也可以使用 MSCK REPAIR TABLE
來呼叫這個指令。
如果資料表已快取,指令會清除資料表及其所有相關聯的依賴項目的快取資料。下次存取資料表或依賴項目的時候,快取會延遲填入。
語法
[MSCK] REPAIR TABLE table_identifier [{ADD|DROP|SYNC} PARTITIONS]
參數
-
table_identifier
指定要修復的資料表名稱。資料表名稱可以選擇加上資料庫名稱。
語法:
[ database_name. ] table_name
-
{ADD|DROP|SYNC} PARTITIONS
指定如何復原分割區。如果未指定,預設為 ADD。
- ADD,指令會將所有不屬於任何資料表分割區的基本資料表資料夾中的子資料夾的新分割區新增至工作階段目錄。
- DROP,指令會從工作階段目錄中刪除所有在檔案系統中不存在位置的分割區。
- SYNC 是 DROP 和 ADD 的組合。
範例
-- create a partitioned table from existing data /tmp/namesAndAges.parquet
CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
LOCATION "/tmp/namesAndAges.parquet";
-- SELECT * FROM t1 does not return results
SELECT * FROM t1;
-- run REPAIR TABLE to recovers all the partitions
REPAIR TABLE t1;
-- SELECT * FROM t1 returns results
SELECT * FROM t1;
+-------+---+
| name|age|
+-------+---+
|Michael| 20|
+-------+---+
| Justin| 19|
+-------+---+
| Andy| 30|
+-------+---+