ALTER DYNAMIC TABLE¶
修改 :doc:` 动态表 </user-guide/dynamic-tables-intro>` 的属性。
本主题内容:
语法¶
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
[ TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM } ]
[ WAREHOUSE = <warehouse_name> ]
其中:
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }有关更多信息,请参阅 群集密钥和聚类表。
参数¶
name
要更改的动态表的标识符。
如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
有关更多信息,请参阅 标识符要求。
SUSPEND | RESUME
指定要对动态表执行的操作:
SUSPEND
会暂停动态表上的刷新。 如果一个动态表被其他动态表使用,它们也会被暂停。RESUME
会恢复动态表上的刷新。 恢复操作向下游级联到所有未手动暂停的下游动态表。
RENAME TO new_name
使用当前未被架构中的任何其他动态表使用的新标识符重命名指定的动态表。
重命名动态表需要动态表架构的 CREATE DYNAMIC TABLE 权限。
您还可以将动态表移动到不同的数据库和/或架构中,同时可选择重命名动态表。为此,请指定一个限定
new_name
值,该值分别以db_name.schema_name.new_name
或schema_name.new_name
的形式包含新数据库和/或架构名称。以下限制条件适用:
目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。
除非 对象所有者(即对对象拥有 OWNERSHIP 权限的角色)也拥有目标架构,否则不得将对象移动到托管访问架构。
重命名对象(表、列等)时,引用该对象的其他对象必须使用新名称进行更新。
SWAP WITH target_dynamic_table_name
在单个事务中交换两个动态表。用于执行此操作的角色必须具有动态表的 OWNERSHIP 权限。
以下限制条件适用:
不得将永久或 瞬态 动态表与临时动态表互换。此限制可防止在将临时动态表替换为永久动态表或瞬态动态表,并且现有永久动态表或瞬态动态表与临时动态表同名时,可能发生的命名冲突。
只能将一个动态表与另一个动态表交换。
REFRESH
指定应手动刷新动态表。
由用户暂停和自动暂停的动态表均可手动刷新。手动刷新的动态表会返回 MANUAL 作为DYNAMIC_TABLE_REFRESH_HISTORY 函数中
refresh_trigger
的输出。有关动态表刷新状态的信息,请参阅 DYNAMIC_TABLE_REFRESH_HISTORY。
SET ...
指定要为表设置的一个或多个属性/参数(用空格、逗号或新行分隔):
TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }
为动态表指定目标滞后时间:
'num seconds | minutes | hours | days'
指定动态表内容滞后于基表更新的最长时间。
例如:
如果动态表中数据的滞后时间不超过 5 分钟,请指定
5 minutes
。如果动态表中数据的滞后时间不超过 5 小时,请指定
5 hours
。
最小值为 1 分钟。如果动态表 A 依赖于另一个动态表 B,则 A 的最小滞后时间必须大于或等于 B 的滞后时间。
DOWNSTREAM
指定在动态表的任何下游动态表被刷新时,应该刷新动态表。
WAREHOUSE = warehouse_name
指定提供计算资源以刷新动态表的仓库的名称。
您必须拥有该仓库的 USAGE 权限。
群集操作 (clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
指定(或修改)一个或多个表列或列表达式作为动态表的群集密钥。这些是自动聚类维护聚类的列/表达式。 在为动态表指定群集密钥之前,应当对微分区有所了解。有关更多信息,请参阅 了解 Snowflake 表结构。
将群集密钥与动态表一起使用时请注意以下几点:
列定义是必需的,必须在语句中明确指定。
群集密钥 并非 旨在或建议用于所有表;它们通常有利于非常大(例如多 TB)的表。
SUSPEND | RESUME RECLUSTER
启用或禁用动态表的 自动聚类。
DROP CLUSTERING KEY
删除动态表的群集密钥。
有关群集密钥和重聚类的更多信息,请参阅 了解 Snowflake 表结构。
使用说明¶
要更改动态表,必须使用具有该动态表的 OPERATE 权限的角色。有关一般信息,请参阅 查看动态表元数据的权限。
创建动态表后,不能更改掩码策略。
如果要更新现有动态表,并需要查看其当前定义,请调用 GET_DDL 函数。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
将名为 product
的动态表的目标滞后时间更改为 1 小时:
ALTER DYNAMIC TABLE product SET TARGET_LAG = '1 hour';
为名为 product
的动态表指定下游目标滞后:
ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
暂停 product
动态表:
ALTER DYNAMIC TABLE product SUSPEND;
恢复 product
动态表:
ALTER DYNAMIC TABLE product RESUME;
重命名 product
动态表:
ALTER DYNAMIC TABLE product RENAME TO updated_product;
将 product
动态表与 new-product
互换:
ALTER DYNAMIC TABLE product SWAP WITH new_product;
更改表的群集密钥:
ALTER DYNAMIC TABLE product CLUSTER BY (date);
从表中移除群集:
ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;