适用于: 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
是一个表。-
要还原的表或具体化视图的名称。 名称不得包含 时态规范或选项规范。 如果关系或类型不符合指定,则无法找到它们,并且 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 命令更改所有权。
-- 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