记不清确切删除时间如何恢复Snowflake中已删除的记录
找回符合条件的已删除记录的操作方案
第一步:排查当前查询的语法逻辑错误
- 先确认你使用的数据库
at(offset => xxx)的时间单位:如果参数单位为分钟,你当前写的-60*1440实际指向60天前而非1天前,1天对应的offset应该直接写-1440;如果单位为秒,当前参数才是正确的1天偏移。 - 确认筛选条件逻辑:如果
link、name字段的nan是数据库原生NULL值而非字符串'nan',需要将= 'nan'替换为IS NULL,否则匹配不到对应记录。同时核对asof_date的年份是否和你要查询的目标年份一致,避免写错年份导致无结果。
第二步:定位准确的删除时间
你未查询到结果的核心原因大概率是删除时间和你推测的1天前不符,可通过以下方式定位准确删除时间:
- 查数据库操作日志:以Snowflake为例,执行如下查询检索近期对
my_table的删除操作,直接获取删除操作的执行时间:
select query_text, start_time from table(information_schema.query_history()) where query_type = 'DELETE' and query_text ilike '%my_table%' order by start_time desc;
- 遍历时间旅行窗口:如果操作日志查不到,可按小时/半天为步长调整offset值,逐一查询是否存在符合条件的记录,直到定位到记录存在的最晚时间点。
第三步:超过时间旅行保留期的恢复方案
如果遍历完所有时间旅行支持的回溯窗口(不同数据库默认保留期1-90天不等)仍未查到记录,可走备份恢复流程:
联系数据库运维,申请从故障安全区(部分云数仓提供删除后7-90天的故障安全恢复能力)或者定期快照备份中恢复指定时间点的my_table数据,再从中筛选符合条件的记录即可。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

