適用於: Databricks SQL
Databricks Runtime 12.2 LTS 及以上版本
UNDROP
命令可處理 Unity 目錄中托管或外部的關聯關係(數據表或具體化檢視表)被意外刪除的問題。
根據預設,此命令會恢復使用者所擁有的指定關聯名稱中,最近被刪除的資料關聯。
父系結構描述和目錄必須存在。 此功能支援在 7 天的保留期間內復原已刪除的資料庫關係。
如果有多個已刪除且同名的關聯,您可以使用 SHOW TABLES DROPPED 來識別資料表 ID,並使用 UNDROP TABLE WITH ID
來還原特定關聯。
如果有與您想要復原之關聯名稱相同的關聯,請使用 ALTER TABLE RENAME TO 命令來變更現有關聯的名稱。
將會復原數據表元數據,例如數據表許可權、數據行規格和屬性。
命令不會復原主鍵和外鍵的約束UNDROP
。
在復原數據表之後,使用 ALTER TABLE ADD CONSTRAINT 手動重新建立它們。
語法
UNDROP { MATERIALIZED VIEW | TABLE } { relation_name | WITH ID relation_id }
參數
MATERIALIZED VIEW
適用於:
Databricks SQL
Databricks Runtime 16.2 及以上版本
指定將還原的關係
relation_name
是實體化視圖。TABLE
指定要還原的關聯
relation_name
是一個資料表。-
要恢復的數據表或物化視圖的名稱。 名稱不得包含 時態規格或選項規格。 如果找不到指定的關聯性或類型,Azure Databricks 會引發
WRONG_COMMAND_FOR_OBJECT_TYPE
或TABLE_OR_VIEW_NOT_FOUND
。 relation_id
以
STRING
所顯示的關聯 UUID 形式的 SHOW TABLES DROPPED 字面值。
權限
UNDROP
需要下列其中一個基本許可權:
- 使用者是關聯擁有者、在架構上具有
CREATE TABLE
和USE SCHEMA
,以及目錄上的USE CATALOG
。 - 使用者是架構的擁有者,而且在目錄上具有
USE CATALOG
。 - 用戶是目錄的擁有者。
- 使用者是中繼存放區的擁有者。
- 使用者具有數據表上的
MANAGE
、架構上的CREATE TABLE
和USE SCHEMA
,以及目錄上的USE CATALOG
。
如果使用者正在復原不同類型的數據表,則會套用其他許可權。
例如,若要恢復已刪除的外部表格,您必須擁有在外部位置或存儲授權上的CREATE EXTERNAL TABLE
,這些項必須存在。
執行此命令之後,擁有權預設為先前的關係擁有者。 如有需要,可以使用 ALTER TABLE 或 ALTER MATERIALIZED VIEW 命令來變更擁有權。
局限性
只有在後端管線仍然存在時,才能還原具現化視圖和流式表。 如果備份管線已刪除,具體化檢視或串流數據表將無法復原。
您無法還原使用 Databricks SQL 建立的具體化檢視或串流數據表。 只能還原使用 ETL 管線建立的具體化檢視或串流數據表。
範例
-- UNDROP using the table name
> CREATE TABLE my_catalog.my_schema.my_table (id INT, name STRING);
> DROP TABLE my_catalog.my_schema.my_table;
> UNDROP TABLE my_catalog.my_schema.my_table;
OK
-- UNDROP WITH ID
– Use SHOW TABLES DROPPED to find dropped tables
> SHOW TABLES DROPPED IN my_schema;
catalogname schemaname tablename tableid tabletype deletedat createdat updatedat createdby owner comment
----------- ---------- ---------- ------------------------------------ --------- ----------------------------- ----------------------------- ----------------------------- ------------- ------------- -------
my_catalog my_schema my_table 6ca7be55-8f58-47a7-85ee-7a59082fd17a managed 2023-05-03 AD at 18:17:56 UTC 2023-05-03 AD at 18:17:00 UTC 2023-05-03 AD at 18:17:00 UTC alf@melmak.et alf@melmak.et
my_catalog my_schema my_table b819f397-c51f-4e60-8acc-05d4d4a7e084 managed 2023-05-04 AD at 10:20:00 UTC 2023-05-04 AD at 08:20:00 UTC 2023-05-04 AD at 08:20:00 UTC alf@melmak.et alf@melmak.et
–- Undrop a specific dropped table.
–- Here, we undrop my_table with table id '6ca7be55-8f58-47a7-85ee-7a59082fd17a'.
-- Note that the table id will be a string surrounded by single quotation marks.
> UNDROP TABLE WITH ID '6ca7be55-8f58-47a7-85ee-7a59082fd17a';
OK
– Continuing from the example above, Now we want to undrop table with ID 'b819f397-c51f-4e60-8acc-05d4d4a7e084'.
- First, we rename the existing table
> ALTER TABLE my_table RENAME TO my_other_table
OK
- Then we can undrop table with the name my_table
> UNDROP TABLE WITH ID 'b819f397-c51f-4e60-8acc-05d4d4a7e084'
OK
—- Create some MVs
> CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM RANGE(5);
> CREATE MATERIALIZED VIEW mv2 AS SELECT * FROM mv1;
—- Drop the MVs
> DROP MATERIALIZED VIEW mv1;
> DROP MATERIALIZED VIEW mv2;
-- UNDROP using the table name
> UNDROP MATERIALIZED VIEW mv1;
OK
-- UNDROP WITH ID
–- Use SHOW TABLES DROPPED to find the dropped mv2's tableId
—- Assume it is 6ca7be55-8f58-47a7-85ee-7a59082fd17a
-- When undropping, note that the table id will be a string surrounded by single quotation marks.
> UNDROP MATERIALIZED VIEW WITH ID '6ca7be55-8f58-47a7-85ee-7a59082fd17a';
OK