激活 Budgets 并创建自定义预算¶
要使用 Budgets 功能,请激活账户预算并创建自定义预算以监控一组特定 Snowflake 对象的 Credit 使用量。
本主题内容:
激活账户预算¶
要开始使用 Budgets 来监控账户的 Credit 使用量,请激活账户预算。激活账户预算后,您可以设置账户的支出限额,并提供电子邮件地址,以便在 Credit 使用量超过支出限额时接收通知。
您可以使用 Snowsight 或 SQL 来激活账户预算。
创建自定义角色以管理账户预算¶
您可以创建自定义角色以激活和修改账户预算。被授予此角色的用户可以担任预算管理员,并且可以对账户预算执行以下操作:
激活和停用账户预算。
设置支出限额。
编辑通知设置。
监控账户的 Credit 使用量。
有关预算管理员角色所需的角色和权限的完整列表,请参阅 Budgets 角色和权限。
例如,创建角色 account_budget_admin
并授予角色监控和管理账户预算的能力:
USE ROLE ACCOUNTADMIN;
CREATE ROLE account_budget_admin;
GRANT APPLICATION ROLE SNOWFLAKE.BUDGET_ADMIN TO ROLE account_budget_admin;
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE account_budget_admin;
使用 Snowsight 激活和设置账户预算¶
备注
只有具有 ACCOUNTADMIN 角色或 被授予了账户预算管理员权限 角色的用户才能激活和设置账户预算。
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
如果出现提示,请选择一个仓库。
在仪表板的右上角,选择 Set up Account Budget。
输入账户的目标支出限额。
输入用于接收通知电子邮件的电子邮件地址。
备注
添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的电子邮件地址 未 经过验证,则通知电子邮件设置会失败。
选择 Finish Setup。
当您使用 Snowsight 添加用于接收通知的电子邮件地址时,Snowflake 会在后台进程中创建 电子邮件通知集成,并执行以下操作:
使用您输入以用于接收通知电子邮件的电子邮件地址,创建名为
default_budget_notification_integration
的新电子邮件通知集成。向 SNOWFLAKE 应用程序授予关于集成的 USAGE 权限。
使用 SQL 激活和设置账户预算¶
备注
只有具有 ACCOUNTADMIN 角色或 被授予了账户预算管理员权限 角色的用户才能激活和设置账户预算。
使用 account_root_budget!ACTIVATE 方法激活账户预算:
CALL snowflake.local.account_root_budget!ACTIVATE();
使用 <budget_name>!SET_SPENDING_LIMIT 方法设置支出限额:
CALL snowflake.local.account_root_budget!SET_SPENDING_LIMIT(1000);
创建与电子邮件地址通知的集成,以接收预算通知。
备注
添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的任何电子邮件地址 未 经过验证,则通知电子邮件设置会失败。
此步骤是 可选的。如果您有与 ALLOWED_RECIPIENTS 列表中已验证电子邮件地址的现有通知集成,请跳到下一步。
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE=EMAIL ENABLED=TRUE ALLOWED_RECIPIENTS=('costadmin@example.com','budgetadmin@example.com');
有关创建通知集成的详细信息,请参阅 创建电子邮件通知集成。
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
使用 <budget_name>!SET_EMAIL_NOTIFICATIONS 方法为账户预算设置电子邮件通知:
CALL snowflake.local.account_root_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com');
激活并设置账户预算后,您可以使用自定义角色,启用非管理员用户来监控账户预算。有关更多信息,请参阅 创建自定义角色以监控账户预算。
创建自定义预算¶
您可以使用 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 创建自定义预算。
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
输入 Budget name。
选择要在其中创建预算的数据库和架构。
输入 Spending limit。
输入用于接收通知的电子邮件地址。
备注
添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的电子邮件地址 未 经过验证,则通知电子邮件设置会失败。
选择 Resources to monitor。
要添加数据库,请展开 Databases 以选择数据库。
要在架构中添加对象,请展开架构以列出可用对象。展开对象类别(例如, Tables 或 Tasks)以选择对象。
要添加仓库,请展开 Warehouses 并选择仓库。
备注
当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。
您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。
当您使用 Snowsight 添加用于接收通知的电子邮件地址时,Snowflake 会在后台进程中创建或更新名为 default_budget_notification_integration
的电子邮件通知集成。如果存在通知集成,Snowflake 会将您输入的新电子邮件地址添加到列表中的现有电子邮件地址。
如果通知集成不存在,Snowflake 会创建通知集成并授予 USAGE 权限。有关详细信息,请参阅 账户预算部分中概述的步骤。
创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算。
使用 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);
设置通知集成和电子邮件地址:
备注
如果您尚未创建电子邮件通知集成,请参阅 账户预算部分中的步骤 创建一个。
要发送通知,必须向 SNOWFLAKE 应用程序授予关于通知集成的 USAGE 权限:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
CALL my_budget!SET_EMAIL_NOTIFICATIONS('budgets_notification_integration', 'costadmin@example.com');
创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算。
要将对象添加到新预算,请参阅 在自定义预算中添加和移除对象。
创建自定义角色以管理自定义预算¶
要监控和修改自定义预算,您可以将权限和实例角色授予自定义角色。有关修改自定义预算必须授予角色的权限和角色的完整列表,请参阅 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 IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE 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 在自定义预算中添加或移除对象¶
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
选择要编辑的预算。
选择 + Resources。
要添加或移除数据库,请展开 Databases 以选择或取消选择数据库。
要在架构中添加或移除对象,请展开架构以列出可用对象。展开对象类别(例如,Tables 或 Tasks)以选择或取消选择对象。
要添加或移除仓库,请展开 Warehouses 并选择或取消选择仓库。
备注
当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。
您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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 |
+-------------+-----------------+-----------+-------------+---------------+
对象必须通过 引用 添加到预算或从其中移除。
您可以按照以下步骤操作,将表
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( SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'applybudget'));
SYSTEM$REFERENCE 函数创建对 TABLE 对象
t1
的引用,授予对表的 APPLYBUDGET 权限。这使预算能够监控您的账户中的指定对象。函数的第三个参数指定引用的作用域,在本例中,SESSION 创建具有会话作用域的引用。传递给预算的 ADD_RESOURCE 方法的引用可以使用任意瞬态引用作用域(也就是说,第三个参数可以是“SESSION”或“CALL”)创建。有关对象和权限的完整列表,请参阅 支持的引用对象类型和权限。
备注
您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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( SYSTEM$REFERENCE('DATABASE', 'db1', 'SESSION', 'applybudget'));
创建自定义角色以监控预算¶
您可以创建供非管理员用户用来监控预算的自定义角色,从而委派预算监控。
创建自定义角色以监控账户预算¶
您可以创建自定义角色,使非账户管理员用户能够监控账户预算。有关必须授予角色以监控账户预算的权限和角色的完整列表,请参阅 Budgets 角色和权限。
示例¶
备注
只有账户管理员才能执行本示例中的语句。
例如,创建角色 account_budget_monitor
并授予角色查看账户预算 Credit 使用量的能力:
USE ROLE ACCOUNTADMIN;
CREATE ROLE account_budget_admin;
GRANT APPLICATION ROLE SNOWFLAKE.BUDGET_ADMIN TO ROLE account_budget_admin;
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE account_budget_admin;
创建自定义角色以监控自定义预算¶
您可以创建自定义角色,使非账户管理员用户能够监控自定义预算。有关必须授予角色以监控自定义预算的权限和角色的完整列表,请参阅 Budgets 角色和权限。
示例¶
备注
只有预算所有者(具有 OWNERSHIP 权限的角色)才能执行本示例中的语句。
使用预算所有者角色授予自定义角色 budget_monitor
监控架构 budgets_db.budgets_schema
中预算 my_budget
的能力:
USE ROLE custom_budget_owner;
GRANT USAGE ON DATABASE budgets_db TO ROLE budget_monitor;
GRANT USAGE ON SCHEMA budget_db.budgets_schema TO ROLE budget_monitor;
GRANT SNOWFLAKE.CORE.BUDGET ROLE budgets_db.budgets_schema.my_budget!VIEWER
TO ROLE budget_monitor;
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE budget_monitor;
使用 Snowsight 监控预算¶
您可以使用 Snowsight 中的 Budgets 页面查看当前和历史预算支出。
备注
只有具有 ACCOUNTADMIN 角色或被授予所需权限和角色的用户才能使用 Snowsight 监控预算。
有关使用自定义账户角色监控账户预算的详细信息,请参阅 创建自定义角色以监控账户预算。
有关使用自定义账户角色监控自定义预算的详细信息,请参阅 创建自定义角色以监控自定义预算。
您可以使用 Budgets 中的 Snowsight 页面查看当前和历史预算支出。
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
在预算的 Current Month 视图中,您可以查看截至当天的每日 Credit 使用量。您可以查看您是否可能超出当月的预算。条形图持续到月底,并根据当月的实际 Credit 使用情况显示预计的 Credit 使用量。Spending limit 行指明触发预算通知的支出限额。
选择 (要显示的月份),按 Current Month 或更长的时间段筛选视图。
您可以将 Spend (当前 Credit 使用量)与 Interval (当月剩余时间)进行比较,查看支出是否超出了每月预算。
您可以选择 Budgets 或 Resources 来筛选视图。
您可以在 Budgets 视图中选择自定义预算,获取有关特定预算的详细信息。
备注
自定义预算的 Service Type 列表中包括 Unused Resources 类型。当预算中的对象没有可显示的 Credit 使用量数据时,将显示此服务类型。如果对象没有计算成本的 Credit 使用量,或者您最近将对象添加到预算并且 无服务器后台任务 尚未执行,则可能发生这种情况。
在 Resources 视图中,您可以按 Service Type、对象 Name 和 Credit Usage 进行筛选和排序。
停用账户预算¶
您可以使用 Snowsight 或 SQL 来停用账户预算。
停用账户预算会将账户预算重置为激活前的状态:
将删除所有历史账户预算数据。
账户预算的背景测量任务已暂停。
将重置支出限额和电子邮件通知的账户预算设置。
账户预算停用不会影响自定义预算。要从账户中删除自定义预算,请使用 DROP BUDGET 命令。
备注
如果账户预算已停用,则无法使用 Snowsight 创建新的自定义预算。但是,您可以继续使用 SQL 创建自定义预算。
使用 Snowsight 停用账户预算¶
您可以使用 Budgets 页面停用账户预算:
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
选择右上角的 ... 更多菜单。
选择 Deactivate account budget。
使用 SQL 停用账户预算¶
您可以使用 account_root_budget!DEACTIVATE 方法停用账户预算:
CALL snowflake.local.account_root_budget!DEACTIVATE();