自定义预算¶
自定义预算允许您监控一组自定义对象的计算成本。您可以通过以下两种方式指定要监视的对象:
- 将标签添加预算中。所有具有指定标签/值对的对象都会受到预算的监控。 
- 将每个对象分别添加到预算中。 
相同的预算可以跟踪单独添加和使用标签添加的对象。如果某个对象由于多个原因已包含在预算中(例如,它是单独添加的,并且具有指定的标签/值对),则其 Credit 使用量仅会计入预算的支出限额一次。
将对象添加到自定义预算后,预算会监控对象的所有计算成本,包括后台维护操作和无服务器功能。例如,如果将表添加到自定义预算中,且表已启用自动聚类,则预算会监控自动聚类后台维护的 Credit 使用量。
自定义预算的受支持对象¶
您可以创建自定义预算来监控以下类型的 Snowflake 对象:
| 对象 | 监控成本 | 
|---|---|
| 警报 | 无服务器警报由账户预算监控。要监控使用用户管理仓库执行的警报的 Credit 使用量,您必须将仓库添加到预算中。有关警报成本的更多信息,请参阅 了解警报的成本。 | 
| 应用程序 . (Snowflake Native Apps) | 由 Snowflake Native App 创建和拥有的对象的预算行为取决于是直接添加应用程序还是通过添加标签来添加应用程序。 
 | 
| 计算池 | Snowpark Container Services 的计算池使用情况。有关更多信息,请参阅 计算池成本。 | 
| 数据库 | 在预算中添加数据库时,数据库包含的所有受支持对象也会自动添加。预算会监控以下对象和无服务器功能的 Credit 使用量: 
 | 
| 物化视图 | 物化视图的后台维护。有关更多信息,请参阅 物化视图成本。 | 
| 架构 | 在预算中添加架构时,架构包含的所有受支持对象也会自动添加。如上所述,预算会监控架构对象的 Credit 使用量。 | 
| 管道 | 使用 Snowpipe 加载数据的资源消耗。有关更多信息,请参阅 Snowpipe 成本。 | 
| 表 | |
| 任务 | Serverless Task 由自定义预算监控。要监控使用用户管理仓库执行的任务的 Credit 使用量,您必须将仓库添加到预算中。有关更多信息,请参阅 任务成本。 | 
| 仓库 | 用于查询执行、Web 界面和其他功能(请参阅 虚拟仓库 Credit 使用量)、Serverless Task 和 云服务计算 的计算资源。 | 
有关更多信息,请参阅 在自定义预算中添加或移除标签。
创建自定义预算¶
接下来的各部分将介绍如何创建自定义预算:
您可以使用 Snowsight 或通过执行 SQL 语句来创建自定义预算。
创建自定义角色以创建预算¶
您可以使用自定义角色在账户中创建预算。有关创建自定义预算必须授予角色的权限和角色的完整列表,请参阅 Budgets 角色和权限。
以下示例创建一个名为 budget_owner 的角色,并授予所需的角色和权限,以在架构 budgets_db.budgets_schema 中创建自定义预算。该示例必须使用 ACCOUNTADMIN 角色执行:
USE ROLE ACCOUNTADMIN;
   
CREATE ROLE budget_owner;
  
GRANT USAGE ON DATABASE budgets_db TO ROLE budget_owner;
GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO ROLE budget_owner;
GRANT DATABASE ROLE SNOWFLAKE.BUDGET_CREATOR TO ROLE budget_owner;
GRANT CREATE SNOWFLAKE.CORE.BUDGET ON SCHEMA budgets_db.budgets_schema
  TO ROLE budget_owner;
如果要启用预算所有者以外的角色来修改自定义预算的设置,则可以创建具有修改权限的自定义角色。有关更多信息,请参阅 创建自定义角色以管理自定义预算。
使用 Snowsight 创建自定义预算¶
备注
如果账户预算未 激活 或已停用,则无法使用 Snowsight 创建自定义预算。但是,您可以使用 SQL 创建自定义预算。
- Sign in to Snowsight. 
- In the navigation menu, select Admin » Cost management. 
- 选择 Budgets。 
- 输入 Budget name。 
- 选择要在其中创建预算的数据库和架构。 
- 输入 Spending limit。 
- 输入用于接收通知的电子邮件地址。 - 备注 - 添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的电子邮件地址 未 经过验证,则通知电子邮件设置会失败。 
- 选择 + Tag & resources,然后添加要添加到自定义预算的标签和资源。 - 备注 - 当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。 
- 如果您直接添加个别对象,则只能将对象添加到一个自定义预算。在这种情况下,如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。此行为不适用于使用标签将对象添加到预算中;如果您使用标签将对象添加到预算中,则具有一个或多个标签的对象可以包含在多个自定义预算中。 
 
创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算。
使用 SQL 命令创建自定义预算¶
创建自定义预算,然后设置支出限额和通知电子邮件地址。
备注
- 要创建自定义预算,您必须使用具有 创建预算所需权限 的角色。 
- 要修改自定义预算,您必须使用具有 修改预算所需权限的角色。 
- 查看账户中的现有预算: - 备注 - 以下语句会返回您具有访问权限的预算。只有具有 ACCOUNTADMIN 角色的用户才能查看账户中的所有预算。 - SELECT SYSTEM$SHOW_BUDGETS_IN_ACCOUNT(); 
- 使用 CREATE BUDGET 命令在 - budgets_db.budgets_schema中创建预算- my_budget- USE SCHEMA budgets_db.budgets_schema; CREATE SNOWFLAKE.CORE.BUDGET my_budget(); 
- 设置每月支出限额。例如,将支出限额设置为每月 500 个 Credit: - CALL my_budget!SET_SPENDING_LIMIT(500); 
- 设置预算通知,以便在 Credit 使用量预计超过支出限额时接收通知。 - 请参阅 预算通知。 
创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算。
要将对象添加到新预算,请参阅 从自定义预算中添加或移除对象。
创建自定义角色以管理自定义预算¶
要监控和修改自定义预算,您可以将权限和实例角色授予自定义角色。有关修改自定义预算必须授予角色的权限和角色的完整列表,请参阅 Budgets 角色和权限。
自定义角色示例¶
授予自定义角色 budget_admin 在架构 budgets_db.budgets_schema 中监控和修改预算 my_budget 的能力:
备注
您需要拥有自定义预算的 OWNERSHIP 权限才能执行以下示例。
- 为架构 - budgets_db.budgets_schema中预算- my_budget的自定义角色- budget_admin授予所需的权限和实例角色:- GRANT USAGE ON DATABASE budgets_db TO ROLE budget_admin; GRANT USAGE ON SCHEMA budget_db.budgets_schema TO ROLE budget_admin; GRANT SNOWFLAKE.CORE.BUDGET ROLE budgets_db.budgets_schema.my_budget!ADMIN TO ROLE budget_admin; GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE budget_admin; 
- 向要在其中添加或移除自定义预算的对象和标签授予 APPLYBUDGET 权限。添加或移除每个对象或标签都需要执行此步骤。 - 例如,要启用角色 - budget_admin,以将数据库- db1添加到自定义预算- my_budget,请执行以下语句:- GRANT USAGE ON DATABASE db1 TO ROLE budget_admin; GRANT APPLYBUDGET ON DATABASE db1 TO ROLE budget_admin; 
从自定义预算中添加或移除对象¶
您可以使用 Snowsight 或 SQL 在自定义预算中添加或移除对象。
备注
要在自定义预算中添加或移除对象,您必须使用具有预算和对象的所需权限的角色。有关更多信息,请参阅 创建自定义角色以管理自定义预算。
使用 Snowsight 从自定义预算中添加或移除对象¶
- Sign in to Snowsight. 
- In the navigation menu, select Admin » Cost management. 
- 选择 Budgets。 
- 选择要编辑的预算。 
- 在仪表板中,选择 |sf-pencil-icon|(编辑图标)。 
- 选择 + Tags & resources,然后选择要添加到自定义预算的对象。 - 备注 - 当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。 
- 如果您直接添加个别对象,则只能将对象添加到一个自定义预算。在这种情况下,如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。此行为不适用于使用标签将对象添加到预算中;如果您使用标签将对象添加到预算中,则具有一个或多个标签的对象可以包含在多个自定义预算中。 
 
- 选择 Done。 
使用 SQL 命令从自定义预算中添加或移除对象¶
用于从预算中添加或移除对象的角色必须具有该对象的 APPLYBUDGET 权限。有关更多信息,请参阅 创建自定义角色以管理自定义预算 部分中的示例。
要查看已在自定义预算中的对象列表,请调用预算的 <budget_name>!GET_LINKED_RESOURCES 方法。例如,要查看 budgets_db.budgets_schema 架构中预算 my_budget 中的对象列表,请执行以下语句:
CALL budgets_db.budgets_schema.my_budget!GET_LINKED_RESOURCES();
该语句返回以下输出:
+-------------+-----------------+-----------+-------------+---------------+
| RESOURCE_ID | NAME            | DOMAIN    | SCHEMA_NAME | DATABASE_NAME |
|-------------+-----------------+-----------+-------------+---------------|
|         326 | DB1             | DATABASE  | NULL        | NULL          |
|         157 | MY_WH           | WAREHOUSE | NULL        | NULL          |
+-------------+-----------------+-----------+-------------+---------------+
备注
该列表不包括:
- 自动添加的对象(例如,由 Snowflake Native App 创建和拥有的计算池和仓库)。 
- 在预算中添加了标签时添加的对象。 
对象必须通过 引用 添加到预算或从其中移除。
- 您可以按照以下步骤操作,将表 - t1添加到预算- my_budget:- 通过执行以下语句将表的 APPLYBUDGET 权限授予角色 - budget_admin:- GRANT APPLYBUDGET ON TABLE t1 TO ROLE budget_admin; 
- 通过执行以下语句,将对表 - t1的引用传递给 ADD_RESOURCE 实例方法:- CALL budgets_db.budgets_schema.my_budget!ADD_RESOURCE( SELECT SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'applybudget')); - SYSTEM$REFERENCE 函数创建对 TABLE 对象 - t1的引用,授予对表的 APPLYBUDGET 权限。这使预算能够监控您的账户中的指定对象。函数的第三个参数指定引用的作用域,在本例中,“SESSION”创建具有会话作用域的引用。传递给预算的 ADD_RESOURCE 方法的引用可以使用任意瞬态引用作用域(也就是说,第三个参数可以是“SESSION”或“CALL”)创建。- 备注 - 如果您想在预算中添加 Snowflake Native App,当您调用 SYSTEM$REFERENCE 时,请为 - object_type实参指定- 'DATABASE'``(而不是 ``'APPLICATION')。- 有关对象和权限的完整列表,请参阅 支持的引用对象类型和权限。 - 备注 - 如果您直接添加个别对象,则只能将对象添加到一个自定义预算。在这种情况下,如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。此行为不适用于使用标签将对象添加到预算中;如果您使用标签将对象添加到预算中,则具有一个或多个标签的对象可以包含在多个自定义预算中。 
 
- 您可以按照以下步骤操作,从预算 - my_budget中移除数据库- db1:- 通过执行以下语句将数据库的 APPLYBUDGET 权限授予角色 - budget_admin:- GRANT APPLYBUDGET ON DATABASE db1 TO ROLE budget_admin; 
- 通过向 REMOVE_RESOURCE 实例方法传递引用来移除数据库: - CALL budgets_db.budgets_schema.my_budget!REMOVE_RESOURCE( SELECT SYSTEM$REFERENCE('DATABASE', 'db1', 'SESSION', 'applybudget')); 
 
