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

Snowflake中被CREATE OR REPLACE VIEW覆盖的旧视图SQL代码如何找回

Snowflake覆盖视图找回旧版本SQL源码方法

可以找回,以下是两种可行方案:

方法1:使用Time Travel功能检索

前提:对应视图所属的schema/数据库已开启Time Travel,且覆盖操作发生在数据保留期内(标准版默认保留1天,企业版最多可配置90天)

  • 确定视图被覆盖的大致时间,执行以下查询获取指定时间点的视图DDL:
    -- OFFSET单位为秒,以下示例为查询当前时间往前30分钟的视图定义
    SELECT GET_DDL('VIEW', '<替换为你的视图全称,格式为DB_NAME.SCHEMA_NAME.VIEW_NAME>', TRUE) AT(OFFSET => -60*30);
    
    也可以指定精确时间戳查询:
    SELECT GET_DDL('VIEW', '<替换为你的视图全称>', TRUE) AT(TIMESTAMP => '替换为UTC格式的目标时间,例:2024-05-20 12:00:00');
    
  • 直接执行查询返回的DDL语句即可恢复旧版本视图。

方法2:从查询历史中检索旧DDL

如果超出Time Travel保留期,可以用该方案,查询历史标准版默认保留1年,企业版保留时间更长

  • 如果你有ACCOUNT_USAGE视图访问权限,执行以下查询:
    SELECT QUERY_TEXT
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
    WHERE QUERY_TEXT ILIKE '%CREATE%VIEW%<替换为你的视图名>%'
      AND EXECUTION_TIMESTAMP < '替换为你执行覆盖操作的UTC时间'
    ORDER BY EXECUTION_TIMESTAMP DESC
    LIMIT 1;
    
  • 如果你没有ACCOUNT_USAGE访问权限,可以替换为 INFORMATION_SCHEMA.QUERY_HISTORY,该视图默认保留最近7天的查询记录:
    SELECT QUERY_TEXT
    FROM INFORMATION_SCHEMA.QUERY_HISTORY
    WHERE QUERY_TEXT ILIKE '%CREATE%VIEW%<替换为你的视图名>%'
      AND EXECUTION_TIMESTAMP < '替换为你执行覆盖操作的UTC时间'
    ORDER BY EXECUTION_TIMESTAMP DESC
    LIMIT 1;
    
  • 查询返回的第一条结果即为覆盖前最新的视图创建语句。

补充建议

  • 如果视图DDL已提交到代码仓库,直接检索仓库历史提交记录是最稳妥的恢复方案。
  • 后续修改视图前建议先执行GET_DDL备份现有定义,或使用CREATE VIEW IF NOT EXISTS代替CREATE OR REPLACE降低误覆盖风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:18:01