You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake删除列后Time Travel失效,如何恢复被删列C的数据?

Snowflake删除列后Time Travel无法找回数据的原因及恢复方案

为什么列C的数据无法通过Time Travel查询返回?

  • 当前表schema优先规则:Snowflake的Time Travel查询会基于当前表的结构来读取历史数据。执行ALTER TABLE DROP COLUMN c后,表的元数据已经移除了列C的定义,所以即使历史快照中存在列C的数据,查询结果也不会包含该列。
  • DROP COLUMN是元数据级操作:这个操作并没有立即物理删除列C的数据,只是在元数据中标记该列不可见。数据会保留到表的Time Travel保留期结束,或者执行VACUUM操作后才会被彻底清理。

如何恢复列C?

方法1:直接使用UNDROP COLUMN(推荐)

只要还在表的Time Travel保留期内(默认1天,企业版最长90天),可以直接恢复被删除的列:

ALTER TABLE time_travel_test UNDROP COLUMN c;

执行后,列C会被恢复,且原有数据完整保留。

方法2:通过克隆历史快照恢复

如果UNDROP无法使用(比如误操作后过了保留期,或者需要单独提取列数据),可以克隆删除列之前的表快照,再将列数据合并回原表:

-- 克隆指定时间点的表到新表
CREATE OR REPLACE TABLE time_travel_test_clone 
CLONE time_travel_test AT(TIMESTAMP=>$good_data_timestamp);

-- 给原表添加列C,再从克隆表同步数据
ALTER TABLE time_travel_test ADD COLUMN c NUMBER;
UPDATE time_travel_test t
SET c = tc.c
FROM time_travel_test_clone tc
WHERE t.a = tc.a AND t.b = tc.b;

补充说明

你测试中的AT(TIMESTAMP=>$good_data_timestamp)查询之所以不返回列C,只是因为当前表的schema已经没有该列定义,但列C的历史数据其实还存在于Snowflake的存储中,直到被真空操作清理。

内容的提问来源于stack exchange,提问作者Felipe Hoffa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:27:29