UNDROP TABLE 语句
使用
UNDROP TABLE
UNDROP TABLE
语句可以恢复被删除的表、动态表和物化视图。是否可以恢复被删除的对象取决于表的
数据保留周期。
数据保留周期
对象能否被恢复取决于数据保留周期(
data_retention_days
data_retention_days
)。Lakehouse 默认保留周期为
1 天(24 小时)。您可以通过
ALTER TABLE 命令调整保留周期,取值范围为
0-90 天。
-- 查看当前保留周期
SHOW CREATE TABLE my_table;
-- 修改保留周期为 7 天
ALTER TABLE my_table SET PROPERTIES ('data_retention_days'='7');
注意:延长保留周期会增加存储成本,Lakehouse 将单独对 Time Travel 产生的存储收取费用。
支持的对象类型
UNDROP TABLE
UNDROP TABLE
可恢复以下类型的对象:
| 被删除的对象 | 删除命令 | 恢复命令 |
|---|
| 普通表(TABLE) | DROP TABLE
DROP TABLE | UNDROP TABLE
UNDROP TABLE |
| 动态表(DYNAMIC TABLE) | DROP DYNAMIC TABLE
DROP DYNAMIC TABLE | UNDROP TABLE
UNDROP TABLE |
| 物化视图(MATERIALIZED VIEW) | DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW | UNDROP TABLE
UNDROP TABLE |
| Table Stream | DROP TABLE STREAM
DROP TABLE STREAM | UNDROP TABLE
UNDROP TABLE |
注意:无论删除的是哪种类型的表对象,恢复时统一使用
UNDROP TABLE
UNDROP TABLE
语法。
语法
UNDROP TABLE [schema_name.]<table_name>
参数说明
| 参数 | 说明 |
|---|
schema_name
schema_name | 可选。指定 schema 的名称 |
table_name
table_name | 被删除的表/动态表/物化视图的名称 |
示例
示例 1:删除表后立即恢复
-- 创建表
CREATE TABLE mytable(id INT, name STRING);
INSERT INTO mytable VALUES(1, 'aaa');
-- 删除表
DROP TABLE mytable;
-- 查看表删除记录
SHOW TABLES HISTORY;
+---------------+------------+-------------------------+----------+------+-------+---------+----------------+-------------------------+
| schema_name | table_name | create_time | creator | rows | bytes | comment | retention_time | delete_time |
+---------------+------------+-------------------------+----------+------+-------+---------+----------------+-------------------------+
| my_schema | mytable | 2023-06-06 12:22:57.642 | UAT_TEST | 1 | 1348 | | 1 | 2023-07-18 17:49:26.374 |
+---------------+------------+-------------------------+----------+------+-------+---------+----------------+-------------------------+
-- 恢复表
UNDROP TABLE mytable;
-- 验证恢复结果
SELECT * FROM mytable;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
+----+------+
示例 2:删除表后创建同名表再恢复
如果删除表后创建了同名表,需先重命名新表才能恢复旧表:
-- 创建并删除表
CREATE TABLE mytable(id INT, name STRING);
INSERT INTO mytable VALUES(1, 'aaa');
DROP TABLE mytable;
-- 重复建表
CREATE TABLE mytable(col1 INT, col2 STRING);
-- 重命名新表
ALTER TABLE mytable RENAME TO mytable_backup;
-- 恢复旧表
UNDROP TABLE mytable;
示例 3:恢复动态表
-- 创建基表
CREATE TABLE dy_base_a (i INT, j INT);
INSERT INTO dy_base_a VALUES (1, 10), (2, 20), (3, 30), (4, 40);
-- 创建动态表
CREATE DYNAMIC TABLE change_table (i, j) AS SELECT * FROM dy_base_a;
REFRESH DYNAMIC TABLE change_table;
-- 查询数据
SELECT * FROM change_table;
+---+----+
| i | j |
+---+----+
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
+---+----+
-- 删除并恢复动态表
DROP DYNAMIC TABLE change_table;
UNDROP TABLE change_table;
-- 验证恢复(动态表属性保持不变)
SELECT * FROM change_table;
示例 4:恢复物化视图
-- 创建基表
CREATE TABLE mv_base_a (i INT, j INT);
INSERT INTO mv_base_a VALUES (1, 10), (2, 20), (3, 30), (4, 40);
-- 创建物化视图
CREATE MATERIALIZED VIEW mv1 (i, j) AS SELECT * FROM mv_base_a;
REFRESH MATERIALIZED VIEW mv1;
-- 删除物化视图
DROP MATERIALIZED VIEW mv1;
-- 查看删除记录
SHOW TABLES HISTORY WHERE table_name = 'mv1';
-- 恢复物化视图
UNDROP TABLE mv1;
-- 验证恢复
SELECT * FROM mv1;
注意事项
相关文档