UNDROP TABLE

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime 12.1 及更高版本

UNDROP 命令解决了意外删除 Unity Catalog 中的托管表或外部表的问题。 默认情况下,此命令会取消删除(恢复)由给定表名的用户拥有的、最近已删除的表。 父架构和目录必须存在。 此功能支持恢复已删除的、未超过 7 天保留期的表。

如果删除了多个同名的表,你可以使用 SHOW TABLES DROPPED 来识别表 ID,然后使用 UNDROP TABLE WITH ID 恢复特定的表。

如果存在与要恢复的表同名的表,请使用 ALTER TABLE RENAME TO 命令更改现有表的名称。

将恢复表元数据,例如表权限、列规范和属性。 UNDROP 命令无法恢复主键和外键约束。 恢复表后,使用 ALTER TABLE ADD CONSTRAINT 手动重新创建这些表。

语法

UNDROP TABLE { table_name | WITH ID table_id }

参数

  • table_name

    要还原的表的名称。 名称不得包含时态规范。 如果找不到该表,Azure Databricks 会引发错误。

  • table_id

    一个 STRING 文本,采用 SHOW TABLES DROPPED 显示的表的 UUID 格式。

权限

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

  • 用户是表的所有者,对架构拥有 CREATE TABLEUSE SCHEMA 权限,对目录拥有 USE CATALOG 权限。
  • 用户是架构的所有者,对目录拥有 USE CATALOG
  • 用户是目录的所有者。
  • 用户是元存储的所有者。

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

运行此命令后,所有权默认为之前的表所有者。 如果需要,可以使用 ALTER TABLE 命令更改所有权。

示例

-- 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