动态表故障排除

本主题介绍对未按预期运行的动态表进行故障排除的解决方案:

由于动态表的使用限制,或者如果您没有必要的权限,某些操作可能会受到限制。有关更多信息,请参阅 动态表的已知限制动态表访问控制

有关动态表成本的信息,请参阅 了解动态表的成本

如果您遇到此处未列出的问题,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。

动态表刷新故障排除

问题

解决方案

我的动态表使用的是完全刷新而不是增量刷新。

动态表的实际 刷新模式 在创建时确定,此后不可变。如果未显式指定,刷新模式默认为 AUTO,它会根据查询复杂性、不支持的构造、运算符或函数等各种因素选择刷新模式。

如果您希望动态表仅以增量方式刷新,那么在创建动态表时应显式设置所需的刷新模式,请注意 使用增量刷新可能会有一些限制

备注

启用 2024_04 行为变更捆绑包后,Snowflake 会根据您的查询定义选择可能表现最佳的刷新模式。

要确定适合您用例的最佳模式,请尝试不同的刷新模式和自动建议。要在不同的 Snowflake 版本中保持一致的行为,您应该在所有动态表上显式设置刷新模式。

有关更多信息,请参阅 设置所有生产动态表的刷新模式

使用具有 必要权限 的角色,您可以使用以下方法之一验证刷新模式:

  • 使用 SQL:运行 SHOW DYNAMIC TABLES 语句。在输出中,text 列显示用户指定的刷新模式,refresh_mode 列显示实际刷新模式,refresh_mode_reason 显示选择实际刷新模式的原因。

  • 使用 Snowsight:在导航菜单中,选择 Monitoring » Dynamic Tables,然后选择您的动态表。您可以在 Table Details 选项卡中查看动态表的刷新模式。

我的动态表的增量刷新很慢。

动态表的刷新性能依赖于对其处理的工作负载或数据的特定假设。

使用 Refresh History 查看方差或点异常值:

  1. 登录 Snowsight

  2. 在导航中,转到 Monitoring » Dynamic Tables

  3. 选择您的动态表并转到 Refresh History 选项卡。

  4. 使用动态表在过去 24 小时内的刷新持续时间进行故障排除。

我的动态表正在运行空刷新,但我看到产生了成本。

当刷新与动态表引用的任何上游对象的更改相关联时,产生零净新行(即添加、更新或删除的行数为零)的刷新会消耗仓库资源。

例如,如果关联的虚拟仓库已暂停,且未识别出基础对象有任何更改,则不会恢复已暂停的虚拟仓库,也不会消耗任何 Credit。这称为 NO_DATA 刷新。相反,如果识别出更改,则会自动恢复虚拟仓库以处理更新,即使应用于动态表的净结果是零行,也将消耗仓库资源。

如果您看到产生成本,但您未对动态表进行任何更改,这可能是由于源表中的变更所致。您可以使用 Snowsight 中的 Refresh History 选项卡,检查是否已使用虚拟仓库 Credit:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Monitoring » Dynamic Tables

  3. 选择您的动态表并转到 Refresh History 选项卡。

  4. 选中 Warehouse used only 复选框,以查看使用仓库进行更新的刷新。

有关更多信息,请参阅 了解动态表的成本

我的动态表跳过了刷新。

动态表按时间表刷新。计划刷新开始时,以下情况可能会导致跳过刷新:

  • 如果正在刷新的动态表上游有另一个动态表,而上游的刷新失败或被跳过。

  • 如果动态表的上一个刷新仍在运行。

  • 如果动态表的刷新时间经常超过目标滞后时间,Snowflake 可能会跳过刷新以降低未来的跳过率。

手动刷新永远不会跳过,但可能会导致跳过其他刷新,特别是在对动态表执行频繁的手动刷新时。这样做会阻止下游动态表刷新。因此,如果某动态表具有根据目标延迟进行刷新的下游动态表,Snowflake 不建议您经常对该动态表执行手动刷新。

我的动态表刷新失败。

与常规 Snowflake 查询一样,动态表刷新可能会由于动态表的查询定义、输入数据(例如解析错误)或内部系统问题而失败。

要确定刷新失败的原因,请执行以下操作:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Monitoring » Dynamic Tables

  3. 选择您的动态表并转到 Table Details 选项卡。

  4. 将鼠标悬停在 Details 下的 Last Completed Refresh 上。随后将显示一个对话框,其中详细说明刷新失败的错误代码和消息。

如果由于 upstream_failed 错误代码导致刷新失败,可能是因为某个上游动态表出现问题。要确定哪个上游表导致了故障,请执行以下操作:

  1. 在 Snowsight 导航菜单中,选择 Monitoring » Dynamic Tables,然后选择您的动态表。

  2. 打开 Graph 页面查看动态表的图形历史记录。

  3. 从图中,选择红色的上游动态表,并检查其 Refresh History

我的动态表正在重新初始化。

由于以下原因之一,您的动态表可能正在重新初始化:

  • 动态表的一个或多个输入被替换。例如,如果在视图上定义了动态表,并且替换了视图,则动态表必须重新初始化。

  • 如果输入的架构变更,并且您的动态表依赖于变更的列。

  • 在动态表的输入上添加、删除或更改了 数据访问策略

  • 克隆的增量动态表 在创建后第一次刷新时可能需要重新初始化。

  • 具有增量刷新的 复制的动态表 在故障转移后重新初始化,然后才能恢复增量刷新。

有关初始化的一般信息,请参阅 了解动态表初始化

动态表创建故障排除

问题

解决方案

创建我的动态表需要很长时间。

使用 CREATE DYNAMIC TABLE 语句创建动态表时,其初始刷新将在预定时间 (ON_SCHEDULE) 进行,或在创建时 (ON_CREATE) 同步进行。初始数据填充或初始化取决于此初始刷新发生的时间。例如,同步初始化会触发对任何引用的上游动态表的刷新,这会在初始化的总持续时间中增加额外的处理时间。

初始化可能需要一些时间,具体取决于扫描的数据量。要查看进度,请执行以下操作:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Monitoring » Query History

  3. Filters 下拉列表中,在 SQL Text 筛选器中输入 CREATE DYNAMIC TABLE,并在 Warehouse 筛选器中输入您的仓库名称。

  4. 选择 SQL text 下动态表的查询,并使用 Query DetailsQuery Profile 选项卡跟踪进度。

有关初始化的一般信息,请参阅 了解动态表初始化

调试动态表

问题

解决方案

我看不到我的动态表的元数据。

要查看动态表的元数据和 Information Schema,必须使用具有该动态表 MONITOR 权限的角色。有关更多信息,请参阅 查看动态表元数据的权限

我的动态表已暂停。

动态表可能因如下原因而暂停:

  • 它直接使用 ALTER DYNAMIC TABLE ...SUSPEND 命令来暂停。

  • 它位于暂停的动态表的下游。

  • 它连续五次刷新失败(跳过的刷新不会计入此次数)。

  • 它是复制动态表,位于复制组或故障转移组。请参阅 复制和动态表

  • 它从一个动态表克隆而来,而该动态表在克隆时有一个或多个基表被删除。

要查看您的动态表暂停的原因,请执行以下操作:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Monitoring » Dynamic Tables

  3. 选择您的动态表并转到 Table Details 选项卡。

  4. 将鼠标悬停在 Details 下的 Scheduling State 上。此时将显示一个对话框,详细说明暂停的原因和日期。

语言: 中文