适用于: Databricks SQL 勾选标记为“是” Databricks Runtime 12.2 LTS 及更高版本check marked yes
              UNDROP 命令解决了 Unity Catalog 中的托管或外部关系(表或具体化视图)被意外删除的问题。
默认情况下,此命令将取消删除(恢复)最近由给定关系名称的用户拥有的关系。
父架构和目录必须存在。 此功能支持在 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 SQL Databricks Runtime 16.2 及更高版本 Databricks Runtime 16.2 及更高版本- 指定要还原的关系 - relation_name是具体化视图。
- TABLE- 指定要还原的关系 - relation_name是一个表。
- 
要还原的表的名称。 名称不得包含 时态规范或选项规范。 如果关系或类型不符合指定,则无法找到它们,并且 Azure Databricks 会引发 WRONG_COMMAND_FOR_OBJECT_TYPE或TABLE_OR_VIEW_NOT_FOUND。
- relation_id- 关系的 UUID 形式的 - STRING字面量,如 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 管道创建的具体化视图或流式处理表。 只能按 ID 还原具体化视图,不能按名称还原。
示例
-- 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
-- Assume the following commands created MVs in an ETL pipeline
> 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 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