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

未使用时间旅行的Snowflake动态表刷新时为何出现时间旅行错误?

问题

在Snowflake中,我有一张动态表TFM_DIM_DATE,它通过自连接DIM_DATE表补充部分字段。动态表定义里从未尝试读取DIM_DATE的历史版本,但关闭DIM_DATE的时间旅行后,刷新动态表时出现以下错误:

Database Error in model tfm_dim_date: SQL compilation error: Failed to refresh dynamic table with refresh_trigger INITIAL at data_timestamp 1743671890105 because of the error: SQL compilation error: Target table failed to refresh: Time travel data is not available for table DIM_DATE. The requested time is either beyond the allowed time travel period or before the object creation time.

动态表的简化定义如下:

create or replace dynamic table TFM_DIM_DATE(
    DATE_KEY,
    FULL_DATE,
    ...etc
) target_lag = '10 minutes' refresh_mode = AUTO initialize = ON_CREATE warehouse = DAGSTER_PRD_WH
 as (
 SELECT
    DTE.DATE_KEY,
    DTE.FULL_DATE,
    ...etc
FROM DIM_DATE AS DTE
INNER JOIN DIM_DATE  AS DTE_MTH
    ON DTE.MONTH_END_DATE = DTE_MTH.FULL_DATE
INNER JOIN DIM_DATE  AS DTE_QTR
    ON DTE.QUARTER_END_DATE = DTE_QTR.FULL_DATE
INNER JOIN
    DIM_DATE AS DTE_PRV_QTR
    ON DTE.PREVIOUS_QUARTER_END_DATE = DTE_PRV_QTR.FULL_DATE
);

请问为何会出现该时间旅行错误?

原因分析
  • Snowflake动态表的增量刷新机制依赖时间旅行功能追踪源表(DIM_DATE)的数据变化。即便你没有在查询中显式调用历史版本,动态表内部会自动记录上一次刷新的时间戳,下一次刷新时会请求源表在该时间点的状态,以此计算增量数据。
  • 当你关闭DIM_DATE的时间旅行(例如设置DATA_RETENTION_TIME_IN_DAYS = 0),该表不再保留历史版本数据。动态表刷新时请求的时间戳(错误信息中的1743671890105)超出了DIM_DATE的可用时间范围,因此触发错误。
  • 另外,动态表的INITIAL刷新触发(首次创建时的初始化)需要源表的完整数据快照,若此时源表时间旅行已关闭,且初始化请求的时间戳对应的版本已被清理,也会导致该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:55:05