了解动态表目标滞后¶
动态表的刷新由数据的 目标滞后 触发,目标滞后决定了数据可允许的过时程度。您可以设置固定目标滞后,也可以将动态表设置为 DOWNSTREAM,使其刷新时间取决于依赖它的其他动态表。
动态表的目标滞后是相对于图表根中的动态表来衡量的,而不是直接上游的动态表。要查看连接到动态表的表图形,请参阅 查看连接到动态表的表图形。
Snowflake 计划刷新,使动态表的实际滞后低于目标滞后。每次刷新的持续时间取决于查询、数据模式和仓库规模。选择目标滞后时,请考虑将 链中的每个动态表 刷新到根所需的时间。否则,系统可能会跳过一些刷新,从而导致更高的实际滞后。
备注
目标滞后不是保证,而是 Snowflake 尝试达到的目标。动态表中的数据会在尽可能不超出目标滞后的时间进行刷新。但是,由于仓库大小、数据大小、查询复杂性和类似因素等缘故,可能会超出目标滞后。
目标滞后的类型¶
目标滞后通过以下方式之一指定。目标滞后与动态表的刷新频率成反比:频繁刷新意味着较低的滞后。
新鲜度度量:定义动态表内容滞后于基表更新的最长时间。
以下示例将
my_dynamic_table设置为每小时刷新一次并保持新鲜度:ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = '1 hour';下游:指定动态表应在其他依赖的动态表刷新时按需刷新。此类刷新可由下游动态表的 创建时初始化、手动刷新 或 定时刷新 触发。
在下面的示例中,
my_dynamic_table设置为基于其下游动态表的目标滞后进行刷新。如果my_dynamic_table没有任何依赖于它的动态表,则它不会刷新。ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = DOWNSTREAM;
确定动态表的最佳目标滞后¶
您设置的目标滞后会影响动态表的 计划刷新 频率。
Snowflake schedules refreshes slightly earlier to allow time for the refresh to complete. For example, if you set the target lag to 5 minutes, it doesn't mean the table will refresh exactly every five minutes. Actual refresh intervals might be shorter than the specified lag. If you want more consistent five-minute refreshes, consider increasing the target lag slightly.
当不需要近乎实时的数据更新时,您可以使用更长的目标滞后来降低成本。例如,如果动态表的数据最多只需要比基表的更新晚一小时,则可以将目标新鲜度指定为一小时(而不是五分钟)以降低成本。
You can use either the DYNAMIC_TABLE_REFRESH_HISTORY table function in INFORMATION_SCHEMA or Snowsight to determine the optimal target lag time per your requirements; for example, if you want to analyze refresh details, including duration and skipped refreshes, to make an informed decision.
有关监控动态表刷新和故障排除的信息,请参阅 监控动态表 和 诊断常见的动态表刷新问题。
DYNAMIC_TABLE_REFRESH_HISTORY 函数返回有关动态表每次刷新的信息,包括刷新所花费的时间以及哪些刷新被跳过。
SELECT
name
FROM
TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
NAME_PREFIX => 'MYDB.MYSCHEMA.', ERROR_ONLY => TRUE
)
);
其输出会反映随时间变化的刷新情况。每一行代表一次刷新。每次动态表刷新时,都会添加一行新数据。
登录 Snowsight。
In the navigation menu, select Transformation » Dynamic tables, and then select the Refresh History tab.
通过 Lag Metrics 检查最大延迟时间。此指标基于每次刷新的实际滞后时间。
更改目标滞后¶
您可能希望根据以下任何原因调整动态表的目标滞后:
您需要更为及时的数据。减少目标滞后可确保动态表更频繁地刷新,提供更接近实时的新数据。
您想优化资源。增加目标滞后可以降低刷新频率,从而节省计算资源,这对于不需要持续更新或数据变化不频繁的工作负载非常有用。例如,如果动态表每 20 分钟刷新一次,但只需要在源表发生变化的一小时内刷新,则设置一小时的目标滞后可以降低成本。
您希望目标滞后与数据管道一致。如果您的动态表依赖于其他刷新间隔更长的表,调整目标滞后可确保其与依赖项一致。
要更改目标滞后,请使用 ALTER DYNAMIC TABLE 命令。有关更多信息,请参阅 更改动态表的仓库或目标滞后。
上游和下游关系如何影响目标滞后¶
下图说明了在与其他动态表的上游和下游关系的上下文中执行的暂停、恢复和手动刷新操作。
该图描述了使用动态表构建的简单声明性数据管道:
DT2被描述为DT1的 下游,因为它依赖于该动态表,并被描述为依赖于它的DT3的 上游。DT3是DT2和DT1的下游,因为它直接依赖于DT2、间接依赖于DT1。DT1直接或间接位于其他动态表的上游。
示例:动态表链的目标滞后¶
考虑以下示例,其中动态表 (DT2) 从另一个动态表 (DT1) 读取数据,以物化其内容。在这种情景下,报告通过查询使用 DT2 的数据。
可能出现以下结果,具体取决于每个动态表指定其滞后的方式:
|
|
刷新结果 |
|---|---|---|
|
|
|
|
|
应避免这种情况。报告查询不会收到任何数据。DT1 经常刷新且 |
|
|
|
|
|
由于 |