自动聚类¶
自动聚类是一种 Snowflake 服务,可按需无缝、持续地管理聚类表的所有重聚类。
请注意,定义聚类表后,系统不一定会立即开始重聚类。只有在聚类表能受益于重聚类操作时,Snowflake 才会对其进行重聚类。
备注
如果您的账户中仍可使用手动重聚类,则可能原因是尚未为您的账户启用自动聚类。有关更多详细信息,请参阅 手动重聚类 – 已弃用。
本主题内容:
自动聚类的优势¶
简化维护¶
自动聚类可消除执行以下任何任务的需要:
监控聚类表的状态。
相反,如同 DML 对这些表执行的操作一样,Snowflake 会监控和评估表,以确定它们能否受益于重聚类,并按需自动重聚类。
指定账户中要用于重聚类的仓库。
Snowflake 在后台执行自动重聚类,您不需要指定要使用的仓库。
仅需为每个表定义一个群集密钥(如适用),Snowflake 将负责管理未来的所有维护。
全方位控制¶
您可随时使用 ALTER TABLE ...SUSPEND / RESUME RECLUSTER 暂停和恢复群集表的自动聚类功能。针对一个表的自动聚类暂停时,无论聚类状态如何,表都永远不会再自动重聚类,因此,也不会产生任何 Credit 费用。
您也可以随时删除聚类表上的群集密钥,从而防止将来对该表执行的所有重聚类。
不会阻止 DML¶
自动聚类是透明的,不会在表重聚类时阻止针对表发出的 DML 语句。
效率出众¶
通过自动聚类,Snowflake 会在内部管理聚类表的状态,以及用于所有自动聚类操作的资源(服务器、内存等)。这允许 Snowflake 按需动态分配资源,从而实现最高效、有效的重聚类。
此外,自动聚类不会执行任何不必要的重聚类。仅在表能够受益于重聚类操作的情况下,才会在适当的时机触发重聚类。
自动聚类的 Credit 使用与仓库¶
自动聚类会消耗 Snowflake Credit,但不需要您提供虚拟仓库。相反,Snowflake 会在内部进行管理,并为重聚类实现高效的资源利用率。
您的账户仅需为聚类表上的自动聚类操作实际消耗的 Credit 付费。
重要
在聚类表上启用或恢复自动聚类后,Snowflake 会尝试将表置于最佳聚类状态,如果表距离上次重聚类已有一段时间,则可能发生重聚类活动(也会产生相应的 Credit 费用)。在表的聚类达到最优状态后,重聚类活动将停止。
同样,在现有表上定义群集密钥或更改聚类表上的群集密钥都可能触发重聚类和 Credit 费用。
为了防止产生任何意外的 Credit 费用,我们建议从一两个选定的表开始,并观察在执行 DML 时为保持良好聚类而产生的相关 Credit 费用。这有助于您为重聚类活动消耗的 Credit 建立基线。
为表启用自动聚类¶
大多数情况下,不需要执行任何任务即可为表启用自动聚类。您只需为表定义 群集密钥 即可。
但此规则不适用于通过克隆 (CREATE TABLE ...CLONE ...) 从具有群集密钥的源表创建的表。在新表启动时,自动聚类处于暂停状态 – 即便源表的自动聚类未暂停也不例外。(无论 CLONE
命令克隆的是表、包含表的架构还是包含表的数据库,都是如此。)
小技巧
在为表定义群集密钥之前,请考虑以下条件,这些条件可能会导致重聚类活动(以及相应的 Credit 费用):
该表未处于最佳聚类状态。有关更多详细信息,请参阅 微分区和数据聚类。
表上的群集密钥已更改。
因此,我们建议从一两个选定表开始,并评估自动聚类对这些表的影响。熟悉自动聚类如何执行重聚类后,即可为其他表定义群集密钥。
有关选择最佳群集密钥的信息,请参阅 选择群集密钥的策略。
若要为表添加聚类,还必须具备包含该表的架构和数据库的 USAGE 或 OWNERSHIP 权限。
查看表的自动聚类状态¶
您可以使用 SQL 查看是否为表启用了自动聚类:
SHOW TABLES 命令。
TABLES 视图(在 Snowflake Information Schema 中)。
TABLES 视图(在 Account Usage 共享数据库中)。
输出中的 AUTO_CLUSTERING_ON
列显示每个表的自动聚类状态,该状态可用于确定是暂停还是恢复给定表的自动聚类。
此外, CLUSTER_BY
列 (SHOW TABLES) 或 CLUSTERING_KEY
列(TABLES 视图)会显示定义为每个表的群集密钥的列。
为表暂停自动聚类¶
要为一个表暂停自动聚类,请使用带有 SUSPEND RECLUSTER
子句的 ALTER TABLE 命令。例如:
ALTER TABLE t1 SUSPEND RECLUSTER; SHOW TABLES LIKE 't1'; +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | automatic_clustering | +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+ | Thu, 12 Apr 2018 13:29:01 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | LINEAR(C1) | 0 | 0 | SYSADMIN | 1 | OFF | +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
为表恢复自动聚类¶
要为一个表恢复自动聚类,请使用带有 RESUME RECLUSTER
子句的 ALTER TABLE 命令。例如:
ALTER TABLE t1 RESUME RECLUSTER; SHOW TABLES LIKE 't1'; +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | automatic_clustering | +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+ | Thu, 12 Apr 2018 13:29:01 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | LINEAR(C1) | 0 | 0 | SYSADMIN | 1 | ON | +---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
查看自动聚类费用¶
自动聚类会消耗 Credit,因为它使用 无服务器计算资源,对每个聚类表执行自动后台维护,包括初始聚类和按需重聚类。要了解自动聚类在每个计算小时消耗多少 Credit,请参阅 Snowflake 服务使用表 中的“无服务器功能 Credit 表”。
具有适当权限的用户可使用 Snowsight、Classic Console 或 SQL 查看自动聚类费用:
- Snowsight:
选择 Admin » Cost Management。
- Classic Console:
- SQL:
查询以下任一内容:
AUTOMATIC_CLUSTERING_HISTORY 表函数(在 Snowflake Information Schema 中)。
AUTOMATIC_CLUSTERING_HISTORY 视图 (在 Account Usage 中)。
可对 AUTOMATIC_CLUSTERING_HISTORY 视图执行以下查询:
查询:自动聚类成本历史记录(按天、按对象)
此查询提供含有自动聚类的表的列表,以及过去 30 天通过服务使用的 Credit(按天细分)。Credit 使用中的任何违规行为或持续高使用量都是需要进行进一步调查的标志。
SELECT TO_DATE(start_time) AS date, database_name, schema_name, table_name, SUM(credits_used) AS credits_used FROM snowflake.account_usage.automatic_clustering_history WHERE start_time >= DATEADD(month,-1,CURRENT_TIMESTAMP()) GROUP BY 1,2,3,4 ORDER BY 5 DESC;查询:自动聚类历史记录和 m 天平均值
此查询显示去年自动聚类使用的 Credit 每日平均值(按周分组)。它可以帮助识别一年中每日平均值的异常情况,以便您可以调查使用量的峰值或意外变化。
WITH credits_by_day AS ( SELECT TO_DATE(start_time) AS date, SUM(credits_used) AS credits_used FROM snowflake.account_usage.automatic_clustering_history WHERE start_time >= DATEADD(year,-1,CURRENT_TIMESTAMP()) GROUP BY 1 ORDER BY 2 DESC ) SELECT DATE_TRUNC('week',date), AVG(credits_used) AS avg_daily_credits FROM credits_by_day GROUP BY 1 ORDER BY 1;
备注
资源监视器 提供对虚拟仓库 Credit 使用量的控制;但是,您不能使用它们来控制 Snowflake 提供的仓库的 Credit 使用量,包括 AUTOMATIC_CLUSTERING 仓库。