激活账户预算或创建自定义预算¶
要使用 Budgets 功能,请激活账户预算并创建自定义预算以监控一组特定 Snowflake 对象的 Credit 使用量。
激活账户预算¶
要开始使用 Budgets 来监控账户的 Credit 使用量,请激活账户预算。激活账户预算后,您可以设置账户的支出限额,并提供电子邮件地址,以便在 Credit 使用量超过支出限额时接收通知。当预计支出超过支出限额的 10% 时,通知将开始发送。
您可以通过使用 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。
使用 SQL 命令激活账户预算¶
备注
只有具有 ACCOUNTADMIN 角色或 被授予了账户预算管理员权限 角色的用户才能激活和设置账户预算。
通过在 SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET 对象上调用 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);
设置预算通知,以便在 Credit 使用量预计超过支出限额时接收通知。
请参阅 处理预算通知。
创建自定义预算¶
您可以使用 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 以选择仓库。
要添加计算池,请展开 Compute Pools 以选择计算池。
备注
当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。
您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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;
要修改自定义预算中的对象,请参阅 在自定义预算中添加和移除对象。
处理预算通知¶
要在 Credit 使用量预计超过支出限额时接收通知,您必须设置预算,以便可以将通知发送到您选择的目的地。您可以通过以下方式接收通知:
电子邮件。
消息推送到由云服务提供的队列(Amazon SNS、Azure 事件网格或 Google Cloud PubSub)。
对 Slack、Microsoft Teams 或 PagerDuty 的 Webhook 的调用。
接下来的各部分介绍如何设置通知以及如何解读通知消息:
设置电子邮件通知¶
要设置电子邮件通知,请执行以下操作:
(可选)如果您想使用自己的通知集成,请创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。
创建一个通知集成,并将 TYPE = EMAIL 和 ALLOWED_RECIPIENTS 设置为收件人的已验证电子邮件地址列表。有关信息,请参阅 创建电子邮件通知集成 和 限制可接收通知的电子邮件地址列表。
备注
添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的任何电子邮件地址 未 经过验证,则通知电子邮件设置会失败。
例如:
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 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( 'costadmin@example.com, budgetadmin@example.com' );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
如果您有想要使用的通知集成,请传入该集成的名称和一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
如果您将通知集成与预算关联,可以通过调用 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME 方法来验证预算是否与通知集成关联。此方法返回与预算相关的电子邮件通知集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
设置队列通知¶
要设置队列通知,请执行以下操作:
创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。
使用 TYPE=QUEUE、DIRECTION=OUTBOUND 以及云提供商所需的附加属性创建一个通知集成。有关信息,请参阅:
备注
您的账户必须与云提供商队列在同一 云平台 上。
例如:
CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration ENABLED = TRUE TYPE = QUEUE DIRECTION = OUTBOUND NOTIFICATION_PROVIDER = AWS_SNS AWS_SNS_TOPIC_ARN = '<ARN_for_my_SNS_topic>' AWS_SNS_ROLE_ARN = '<ARN_for_my_IAM_role>';
备注
对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
将通知集成与预算关联。调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
验证通知集成是否与预算相关。
调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法打印出与预算相关的通知集成列表。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
设置 Webhook 通知¶
要设置 Webhook 通知,请执行以下操作:
创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。
使用 TYPE=WEBHOOK 以及 Webhook 所需的附加属性创建一个通知集成。有关信息,请参阅 发送 Webhook 通知。
通知消息采用 JSON 格式,因此您应该配置通知集成以处理此格式。例如,以下语句为 Slack Webhook 创建一个密钥和一个通知集成:
CREATE OR REPLACE SECRET my_database.my_schema.slack_secret TYPE = GENERIC_STRING SECRET_STRING = '... secret in my Slack webhook URL ...'; CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration ENABLED = TRUE TYPE = WEBHOOK WEBHOOK_URL = 'https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET' WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}' WEBHOOK_HEADERS=('Content-Type'='application/json') WEBHOOK_SECRET = slack_secret;
备注
对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息。确保转义 JSON 字符串中的双引号和反斜杠:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
如果您正在使用依赖于密钥的 Webhook 通知集成,请授予 SNOWFLAKE 应用程序以下权限。
对该密钥的 READ 权限。
对包含该密钥的架构的 USAGE 权限。
对包含该架构的数据库的 USAGE 权限。
例如:
GRANT READ ON SECRET slack_secret TO APPLICATION snowflake; GRANT USAGE ON SCHEMA my_schema TO APPLICATION snowflake; GRANT USAGE ON DATABASE my_database TO APPLICATION snowflake;
将通知集成与预算关联。
调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
验证通知集成是否与预算相关。
调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法,该方法会打印出与预算相关的通知集成列表。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget
的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
解读 JSON 通知消息¶
当您配置预算以向云提供商队列或 Webhook 发送通知时,通知消息包含一个类似如下的 JSON 对象:
{
"account_name": "MY_ACCOUNT",
"budget_name": "MY_BUDGET_NAME",
"type": "BUDGET_LIMIT_WARNING",
"limit": "100",
"spending": "67.42",
"spending_percent": "67.42",
"spending_trend_percent": "130.63",
"time_percent":"51.61"
}
该 JSON 对象包含以下键值对:
键 |
描述 |
---|---|
|
您的账户名称。 |
|
您的预算名称。对于账户预算,名称是 |
|
通知的类型(例如, |
|
您为预算设定的支出限额。 |
|
本月的 Credit 使用量。 |
|
已经花费的支出限额百分比 ( |
|
预计到月底将花费的支出限额百分比 ( |
|
本月已过去的时间百分比(例如,如果本月过了一半,则为 |
检查有关预算的通知历史记录¶
要查看有关预算的通知历史记录,请调用 NOTIFICATION_HISTORY 函数并按集成名称进行筛选。例如:
SELECT * FROM TABLE(
INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
INTEGRATION_NAME=>'budgets_notification_integration'
)
);
表示预算通知的行对应的 message_source
列包含 BUDGET
。
从预算中移除通知集成¶
要从预算中移除通知集成,请调用 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。例如:
CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
'budgets_notification_integration',
);
在自定义预算中添加和移除对象¶
您可以使用 Snowsight 或 SQL 在自定义预算中添加或移除对象。
备注
要在自定义预算中添加或移除对象,您必须使用具有预算和对象的所需权限的角色。有关更多信息,请参阅 创建自定义角色以管理自定义预算。
使用 Snowsight 从自定义预算中添加或移除对象¶
登录 Snowsight。
选择 Admin » Cost Management。
选择 Budgets。
选择要编辑的预算。
选择 + Resources。
要添加或移除数据库,请展开 Databases 以选择或取消选择数据库。
要在架构中添加或移除对象,请展开架构以列出可用对象。展开对象类别(例如,Tables 或 Tasks)以选择或取消选择对象。
要添加或移除仓库,请展开 Warehouses 以选择或取消选择仓库。
要添加或移除计算池,请展开 Compute Pools 以选择或取消选择计算池。
备注
当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。
您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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( 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( SYSTEM$REFERENCE('DATABASE', 'db1', 'SESSION', 'applybudget'));
创建自定义角色以监控预算¶
您可以创建供非管理员用户用来监控预算的自定义角色,从而委派预算监控。
创建自定义角色以监控账户预算¶
您可以创建自定义角色,使非账户管理员用户能够监控账户预算。有关必须授予角色以监控账户预算的权限和角色的完整列表,请参阅 Budgets 角色和权限。
示例¶
备注
只有账户管理员才能执行本示例中的语句。
例如,创建角色 account_budget_monitor
并授予角色查看账户预算 Credit 使用量的能力:
USE ROLE ACCOUNTADMIN;
CREATE ROLE account_budget_monitor;
GRANT APPLICATION ROLE SNOWFLAKE.BUDGET_VIEWER TO ROLE account_budget_monitor;
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE account_budget_monitor;
创建自定义角色以监控自定义预算¶
您可以创建自定义角色,使非账户管理员用户能够监控自定义预算。有关必须授予角色以监控自定义预算的权限和角色的完整列表,请参阅 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 DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE budget_monitor;
监控预算¶
您可以使用 Snowsight 或 SQL 监控预算。
使用 Snowsight 监控预算¶
您可以使用 Budgets 中的 Snowsight 页面查看当前和历史预算支出。
备注
只有具有 ACCOUNTADMIN 角色或被授予所需权限和角色的用户才能使用 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 进行筛选和排序。
使用 SQL 命令来监控预算¶
要监控账户预算,您必须拥有必需的权限。有关更多信息,请参阅 创建自定义角色以监控账户预算。
使用 account_budget_monitor
角色查看账户预算的支出历史记录:
USE ROLE account_budget_monitor;
CALL snowflake.local.account_root_budget!GET_SPENDING_HISTORY(
TIME_LOWER_BOUND => DATEADD('days', -7, CURRENT_TIMESTAMP()),
TIME_UPPER_BOUND => CURRENT_TIMESTAMP()
);
您可以按服务类型监控支出历史记录。要查看过去一周账户预算的搜索优化无服务器功能的支出历史记录,请执行以下语句:
USE ROLE account_budget_monitor;
CALL snowflake.local.account_root_budget!GET_SERVICE_TYPE_USAGE(
SERVICE_TYPE => 'SEARCH_OPTIMIZATION',
TIME_DEPART => 'day',
USER_TIMEZONE => 'UTC',
TIME_LOWER_BOUND => DATEADD('day', -7, CURRENT_TIMESTAMP()),
TIME_UPPER_BOUND => CURRENT_TIMESTAMP()
);
要监控自定义预算,您必须拥有必需的权限。有关更多信息,请参阅 创建自定义角色以监控自定义预算。
使用 budget_monitor
角色查看自定义预算的支出历史记录。例如,要查看自定义预算 na_finance_budget
在架构 budgets_db.budgets_schema
中的支出历史记录,请执行以下语句:
USE ROLE budget_monitor;
CALL budgets_db.budgets_schema.na_finance_budget!GET_SPENDING_HISTORY(
TIME_LOWER_BOUND => DATEADD('days', -7, CURRENT_TIMESTAMP()),
TIME_UPPER_BOUND => CURRENT_TIMESTAMP()
);
您可以按服务类型监控支出历史记录。例如,要查看预算中包含的物化视图的支出历史记录,请执行以下语句:
USE ROLE budget_monitor;
CALL budgets_db.budgets_schema.na_finance_budget!GET_SERVICE_TYPE_USAGE(
SERVICE_TYPE => 'MATERIALIZED_VIEW',
TIME_DEPART => 'day',
USER_TIMEZONE => 'UTC',
TIME_LOWER_BOUND => DATEADD('day', -7, CURRENT_TIMESTAMP()),
TIME_UPPER_BOUND => CURRENT_TIMESTAMP()
);
有关更多信息,请参阅 预算方法。
禁用预算通知¶
要禁用预算通知,请调用 SET_NOTIFICATION_MUTE_FLAG 方法,并将 TRUE 作为实参传入。例如:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
停用账户预算¶
您可以使用 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();