克隆动态表¶
克隆操作会创建具有相同的列定义的新动态表,并包含源动态表中的全部现有数据,而不会实际复制数据。
您可以将动态表克隆到新的动态表或常规表。
将动态表克隆到新的动态表¶
默认情况下,无论您是直接克隆动态表还是克隆包含动态表的数据库或架构,克隆的动态表都处于暂停状态。在 DYNAMIC_TABLE_GRAPH_HISTORY 表函数的输出中,其 SCHEDULING_STATE
将 CLONED_AUTO_SUSPENDED 显示为 reason_code
。在这些克隆动态表的下游创建的所有动态表也将暂停,reason_code
为 UPSTREAM_CLONED_AUTO_SUSPENDED。有关更多信息,请参阅 自动动态表暂停。
-- Clone a dynamic table to a new dynamic table
CREATE [ OR REPLACE ] [ TRANSIENT ] DYNAMIC TABLE <name>
CLONE <source_dynamic_table>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
[
COPY GRANTS
TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
WAREHOUSE = <warehouse_name>
]
您还可以克隆过去特定时刻存在的动态表:
CREATE DYNAMIC TABLE my_cloned_dynamic_table CLONE my_dynamic_table AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
有关更多信息,请参阅 使用 Time Travel 进行克隆(仅限数据库、架构、表、动态表、事件表和流)。
将动态表克隆到新表¶
克隆表继承源动态表的相同列定义和数据,但缺少动态表特定的属性。它们保留行访问和掩码策略、标签、群集密钥和注释。
-- Clone a dynamic table to a new table
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] <name>
CLONE <source_dynamic_table_name>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
将动态表克隆为常规表时,需要遵循与 克隆常规表 相同的注意事项,但有以下例外:
源动态表必须 已初始化,才能克隆为常规表。
无法克隆动态 Apache Iceberg™ 表。
克隆动态表管道的最佳实践¶
在同一克隆命令中克隆动态表管道的所有元素,以避免重新初始化管道。您可以通过在同一架构或数据库中整合管道的所有元素(例如基表、视图和动态表)来做到这一点。