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

使用CLONE恢复对象后,如何保留原表的Time Travel历史?

保留原表Time Travel历史的表恢复方案

要实现快速恢复表到指定版本,同时保留原表完整的Time Travel历史,可采用以下优化方案:

方案一:保留交换后的原表归档

无需删除CLONE + SWAP生成的恢复表,而是将其重命名为历史归档表,后续直接从该归档表回溯更早版本:

-- 克隆指定时间点的表版本
CREATE TABLE my_table_restore CLONE my_table AT(OFFSET => -3600);
-- 交换完成快速恢复
ALTER TABLE my_table SWAP WITH my_table_restore;
-- 将原表(已被改名的my_table_restore)重命名为归档表,保留完整历史
ALTER TABLE my_table_restore RENAME TO my_table_historical;

后续若需恢复更早版本,直接从my_table_historical执行CLONE AT或Time Travel查询即可,无需繁琐的UNDROP操作。

方案二:先备份完整历史再交换

先克隆原表的完整快照(包含全部Time Travel历史)作为备份,再执行交换恢复:

-- 备份原表完整历史
CREATE TABLE my_table_full_backup CLONE my_table;
-- 克隆指定时间点版本用于恢复
CREATE TABLE my_table_restore CLONE my_table AT(OFFSET => -3600);
-- 交换恢复
ALTER TABLE my_table SWAP WITH my_table_restore;
-- 可按需删除临时恢复表
DROP TABLE my_table_restore;

该方案通过独立的备份表保存原表完整历史,恢复后的生产表若需回溯更早版本,直接从备份表操作即可。

补充优化:原地恢复保留历史(适配A/B测试需求)

若你可以接受稍慢的操作,且需要保留原表完整历史并支持A/B测试,可优化INSERT OVERWRITE流程:

-- 克隆原表用于恢复前后的A/B测试对比
CREATE TABLE my_table_ab_test CLONE my_table;
-- 原地恢复原表到指定版本,保留原表Time Travel历史
INSERT OVERWRITE INTO my_table SELECT * FROM my_table AT(OFFSET => -3600);

这种方式下,原表的Time Travel历史会完整保留(包含恢复操作的前后版本),my_table_ab_test可用于数据差异验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:35:06