UNDROP

适用于:勾选标记为“是” Databricks SQL 勾选标记为“是” Databricks Runtime 12.2 LTS 及更高版本

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 命令更改所有权。

示例

-- 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 within a DLT 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 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