UNDROP

适用于: 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 Runtime 16.2 及更高版本

    指定要还原的关系 relation_name 是具体化视图。

  • TABLE

    指定要还原的关系 relation_name 是一个表。

  • relation_name

    要还原的表的名称。 名称不得包含 时态规范或选项规范。 如果关系或类型不符合指定,则无法找到它们,并且 Azure Databricks 会引发 WRONG_COMMAND_FOR_OBJECT_TYPETABLE_OR_VIEW_NOT_FOUND

  • relation_id

    关系的 UUID 形式的 STRING 字面量,如 SHOW TABLES DROPPED 所示。

权限

UNDROP 需要以下基本权限之一:

  • 用户是关系的所有者,并在架构中拥有CREATE TABLEUSE SCHEMA,在目录中拥有USE CATALOG
  • 用户是架构的所有者,对目录拥有 USE CATALOG
  • 用户是目录的所有者。
  • 用户是元存储的所有者。
  • 用户在表上拥有MANAGE,在架构上拥有CREATE TABLEUSE SCHEMA,在目录上拥有USE CATALOG

如果用户恢复不同类型的表,则还需要其他权限。 例如,要取消删除外部表,你还必须对外部位置或存储凭据(必须存在)拥有 CREATE EXTERNAL TABLE 权限。

运行此命令后,所有权默认为以前的关系所有者。 如果需要,可以使用 ALTER TABLEALTER 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