关于管理动态表

管理动态表通常涉及以下任务:

任务

描述

列出动态表并查看有关动态表的信息

列出和查看动态表。

删除动态表

删除动态表。

更改动态表的仓库或目标滞后

更改动态表。

列出动态表并查看有关动态表的信息

要列出数据库中的动态表并查看有关这些动态表的信息,可以使用 Snowsight 或 SQL 命令:

使用 Snowsight 列出动态表并查看详细信息

要列出架构中的动态表并查看有关动态表的信息,请执行以下操作:

  1. 登录 Snowsight

  2. 选择 Data » Databases

  3. 选择数据库和架构。

  4. Schema Details 中,选择 Dynamic Tables 选项卡。

    请注意,您还可以通过展开 Dynamic Tables,在数据库对象资源管理器中查看动态表列表。

  5. 要查看有关特定动态表的信息,请在数据库对象资源管理器或 Dynamic Tables 选项卡的动态表列表中选择该动态表。

    此页面上的选项卡提供一些与 表详细信息页面 相同的信息,包括:

    • 动态表的定义以及为使用动态表而授予的权限

    • 有关动态表中列的信息

    • 动态表中最多 100 行数据的预览

    此外,动态表详细信息页面还包括可用于查看有关动态表信息的选项卡:

使用 SQL 命令列出动态表并查看详细信息

  • 使用 SHOW DYNAMIC TABLES 命令可列出当前数据库中的动态表(如果当前未使用数据库,则列出账户中的动态表)。

    例如,要列出数据库 mydb 和架构 myschema 中名称以 product_ 开头的动态表,请执行以下 SQL 语句:

    SHOW DYNAMIC TABLES LIKE 'product_%' IN SCHEMA mydb.myschema;
    
    Copy

    有关该命令的完整语法,请参阅 SHOW DYNAMIC TABLES

  • 要输出有关动态表中列的信息,请使用以下 DESCRIBE DYNAMIC TABLE 命令。

    例如,要列出名为 product 的动态表中的列:

    DESC DYNAMIC TABLE product;
    
    Copy

动态表也包含在 TABLES 视图 的结果中。

删除动态表

要删除动态表,您可以使用 Snowsight 或 SQL 命令。

Snowsight:
  1. 在 Snowsight 中,打开动态表详细信息页面(说明)。

  2. 在页面右上角的 More 菜单中,选择 Drop

SQL:
  • 使用 DROP DYNAMIC TABLE 命令。

    例如,要删除名称为 product 的动态表,请使用:

DROP DYNAMIC TABLE product;
Copy

使用动态表共享数据

动态表是可共享的对象。要共享动态表,数据共享提供商要将动态表上的权限授予共享,从而供数据共享使用者使用。

如何使用动态表共享数据

提供商可以使用直接共享或列表与其他 Snowflake 账户共享选定的动态表,这样就可以在账户之间共享数据,而无需实际移动数据。该过程涉及在提供商的账户中创建数据库的 共享、在提供商的账户中授予数据库访问权限、授予访问权限以及向共享添加其他对象。要了解更多信息,请参阅 Secure Data Sharing 简介Snowflake 中的数据共享和 Collaboration 概述

数据共享提供商可选择在单个动态表上授予 SELECT 权限,也可选择在数据库中所有动态表上授予 SELECT 权限,如以下示例所示。

GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON DYNAMIC TABLE mydb.public TO SHARE share1;
Copy

有关更多详细信息,请参阅 GRANT <privilege> ...TO SHARE

创建动态表以引入共享数据

要创建动态表以引入共享数据,请执行以下操作:

  1. 确保您具有 正确的权限,并从共享中创建数据库并授予其权限。

    CREATE DATABASE shared_db FROM SHARE provider_account.share1;
    
    Copy
  2. 为共享数据库 授予权限

  3. 创建共享动态表。

    CREATE OR REPLACE DYNAMIC TABLE <dt_name>
      TARGET_LAG = '1 day'
      WAREHOUSE = <warehouse_name>
      AS
        SELECT * FROM shared_db.public.mydb;
    
    Copy

    备注

    必须对动态表使用的所有基础对象启用变更跟踪。要使用动态表引入共享数据,数据共享提供商需要在共享对象上启用 change_tracking。请参阅 启用更改跟踪

当您使用动态表引入共享数据时,查询不能从共享动态表或引用上游动态表的共享安全视图中选择。

更改动态表的仓库或目标滞后

要更改动态表的仓库或目标滞后,请使用以下 ALTER DYNAMIC TABLE 命令。

例如,要将动态表 product 的仓库更改为 my_other_wh,请运行以下命令:

ALTER DYNAMIC TABLE product SET
  WAREHOUSE = my_other_wh;
Copy

下图说明了在与其他动态表的上游和下游关系的上下文中执行的暂停、恢复和手动刷新操作。

动态表之间的关系。用于帮助说明暂停、恢复和手动刷新。

该图描述了使用动态表构建的简单声明性数据管道。与小河中的水流类似,动态表管道中的数据从根向下游流向叶动态表:

  • DT2 被描述为 DT1 的 下游,因为它依赖于该动态表,并被描述为依赖于它的 DT3 的 上游

  • DT3 是 DT2 和 DT1 的下游,因为它直接依赖于 DT1、间接依赖于 DT2。

  • DT1 直接或间接位于其他动态表的上游。

有关使用下游目标滞后的更多详细信息和示例,请参阅 了解目标滞后

确定动态表的最佳目标滞后

要确定动态表的最佳目标滞后时间,可以使用 Snowsight 或 SQL 命令。

Snowsight:
  1. 动态表详细信息页面 上,选择 Refresh History 选项卡。

  2. 检查最长实际滞后时间,该时间显示在选项卡顶部。此指标基于每次刷新的实际滞后时间。

SQL:
  • 使用 INFORMATION_SCHEMA 中的 DYNAMIC_TABLE_REFRESH_HISTORY 表函数。此函数返回有关动态表每次刷新的信息,包括刷新所花费的时间以及哪些刷新被跳过。

您选择的滞后时间可能会影响由自动刷新过程确定的刷新计划。自动刷新过程会选择一个最符合动态表滞后时间的计划。

确定使用增量刷新还是完全刷新

要确定是使用增量刷新还是完全刷新来更新动态表,可以使用 Snowsight 或 SQL 命令。

Snowsight:
SQL:
  • 使用 SHOW DYNAMIC TABLES 命令,并检查输出中 REFRESH_MODE 列的值。

    REFRESH_MODE_REASON 包含有关 REFRESH_MODE 选择的更多详细信息。

了解对基表中的列所做的变更造成的影响

基表、视图和基础动态表中的列可能会随时间而变化。某些变更可能会影响动态表本身;其他变更可能影响有限或没有影响。

当与动态表关联的基础对象发生变更时,将适用以下行为:

变更

影响

  • 添加了新列。

  • 移除了未使用的现有列。

无。如果将新列添加到基表中或删除了未使用的列,则不会发生任何操作,并且刷新会像之前一样继续进行。

  • 使用相同的列名称和类型重新创建基础基表。

  • 使用相同的名称和类型重新创建基础基表列。

完全刷新/重新初始化:在下一个刷新周期中,将进行完全刷新,以确保动态表中没有不正确或过时的数据。

  • 动态表使用的基础列或其他元素的名称变更,或以其他方式执行的变更。

动态表的状态将变更为 FAILING。 必须重新创建动态表才能响应变更。有关动态表状态的更多信息,请参阅 动态表状态

了解自动暂停行为

备注

如果系统观察到五个连续刷新错误,则动态表将暂停。由于刷新错误而暂停的动态表通常称为 自动暂停,因为它们是由系统暂停的,而不是通过用户操作暂停的。

任何依赖于暂停的动态表的动态表也会暂停。SCHEDULING_STATE 描述动态表的当前状态。

语言: 中文