动态表¶
动态表是根据定义的查询和目标新鲜度自动刷新的表,从而简化了数据转换和管道管理,无需手动更新或进行自定义安排。
创建动态表时,您可以定义一个查询来指定应如何从基础对象转换数据。然后,Snowflake 处理动态表的刷新计划,根据查询对基础对象所做的更改自动对其进行更新。
动态表的工作原理¶
动态表通过自动刷新过程进行更新,该过程定期执行转换查询。此过程计算对基础对象所做的更改,并使用与该表关联的计算资源将其合并到动态表中。

数据的刷新频率和新鲜度由创建动态表期间指定的目标滞后决定,动态表定义了数据应保持的最新程度。刷新过程使用指定的目标滞后来安排更新。例如,五分钟的目标滞后可确保动态表中的数据滞后于基表更新不超过五分钟。
当不需要近乎实时的数据更新时,更长的目标滞后可用于降低成本。例如,如果动态表的数据最多只需要比基表的更新晚一小时,则可以将目标新鲜度指定为一小时(而不是五分钟)以降低成本。
有关更多信息,请参阅 了解动态表目标滞后 和 了解动态表初始化和刷新。
何时使用动态表¶
动态表非常适合以下场景:
您希望避免手动跟踪数据依赖关系和管理刷新计划。
您需要在不编写自定义代码的情况下物化来自多个基表的查询结果。
您需要为管道中的数据转换构建多个表。
您无需对刷新计划进行精细控制,只需为管道指定目标新鲜度即可。
您想使用动态表作为数据流来源。
用例示例¶
缓慢更改维度 (SCDs): 动态表可用于实现类型 1 和类型 2 SCDs,具体方法是读取变更数据流,并对按更改时间戳排序的记录密钥使用窗口函数。此方法可处理无序插入、删除和更新,从而简化了 SCDs 的创建过程。有关详细信息,请参阅 使用动态表实现缓慢变化维度 (link removed)。
批处理到数据流过渡:动态表支持使用单个 ALTER DYNAMIC TABLE 命令从批处理无缝过渡到流式处理。您可以控制管道中的刷新频率,以平衡成本和数据新鲜度。
主要注意事项¶
声明式 SQL: 动态表允许您以声明方式定义管道结果,而无需手动管理转换步骤。
自动刷新: Snowflake 根据您的目标新鲜度要求处理数据刷新的编排,包括计划和执行。
性能优化: 动态表对支持它的工作负载使用增量处理,可通过仅更新已更改的数据而非执行全面刷新来提高性能。