为何设置DATA_RETENTION_TIME_IN_DAYS=0的表执行UNDROP仍可恢复?
问题解答
现象性质
该行为是Snowflake的预期正常行为,不属于功能异常。
核心原因
出现该现象的本质是两个独立的保留周期规则被混淆了:
DATA_RETENTION_TIME_IN_DAYS参数控制的是Time Travel(时间回溯)功能的保留时长:仅用于表正常存在时,查询表的历史数据版本、恢复误修改/误删除的行数据,设置为0仅代表关闭了表运行期间的历史数据回溯能力,无法使用AT | BEFORE语法查询历史快照,和表删除后的恢复能力完全无关。UNDROP命令依赖的是已删除对象的回收站保留周期:所有执行普通DROP操作的对象(表、模式、数据库),无论其自身的Time Travel保留期设置为多少,都会先进入回收站留存:- Snowflake标准版账号回收站保留期固定为1天
- 企业版及以上账号可配置最长90天的回收站保留期
只有当对象在回收站的保留期到期被永久清理,或者删除时主动加了PURGE参数跳过回收站,才会无法通过UNDROP恢复。
验证方法
你可以通过以下测试验证上述逻辑:
create or replace table t1 (col1 string) DATA_RETENTION_TIME_IN_DAYS=0; insert into t1 values ('abc'); drop table t1 purge; -- 加PURGE参数直接永久删除,不进入回收站 undrop table t1; -- 此时会报错:Table T1 does not exist or was purged
内容的提问来源于stack exchange,提问作者Cristian Scutaru
相关产品推荐
相关产品推荐

