激活 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;
Copy

使用 Snowsight 激活和设置账户预算

备注

只有具有 ACCOUNTADMIN 角色或 被授予了账户预算管理员权限 角色的用户才能激活和设置账户预算。

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

  4. 如果出现提示,请选择一个仓库。

  5. 在仪表板的右上角,选择 Set up Account Budget

  6. 输入账户的目标支出限额。

  7. 输入用于接收通知电子邮件的电子邮件地址。

    备注

    添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的电子邮件地址 经过验证,则通知电子邮件设置会失败。

  8. 选择 Finish Setup

当您使用 Snowsight 添加用于接收通知的电子邮件地址时,Snowflake 会在后台进程中创建 电子邮件通知集成,并执行以下操作:

  • 使用您输入以用于接收通知电子邮件的电子邮件地址,创建名为 default_budget_notification_integration 的新电子邮件通知集成。

  • 向 SNOWFLAKE 应用程序授予关于集成的 USAGE 权限。

使用 SQL 激活和设置账户预算

备注

只有具有 ACCOUNTADMIN 角色或 被授予了账户预算管理员权限 角色的用户才能激活和设置账户预算。

  1. 使用 account_root_budget!ACTIVATE 方法激活账户预算:

    CALL snowflake.local.account_root_budget!ACTIVATE();
    
    Copy
  2. 使用 <budget_name>!SET_SPENDING_LIMIT 方法设置支出限额:

    CALL snowflake.local.account_root_budget!SET_SPENDING_LIMIT(1000);
    
    Copy
  3. 创建与电子邮件地址通知的集成,以接收预算通知。

    备注

    添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的任何电子邮件地址 经过验证,则通知电子邮件设置会失败。

    此步骤是 可选的。如果您有与 ALLOWED_RECIPIENTS 列表中已验证电子邮件地址的现有通知集成,请跳到下一步。

    CREATE NOTIFICATION INTEGRATION budgets_notification_integration
      TYPE=EMAIL
      ENABLED=TRUE
      ALLOWED_RECIPIENTS=('costadmin@example.com','budgetadmin@example.com');
    
    Copy

    有关创建通知集成的详细信息,请参阅 创建电子邮件通知集成

  4. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  5. 使用 <budget_name>!SET_EMAIL_NOTIFICATIONS 方法为账户预算设置电子邮件通知:

    CALL snowflake.local.account_root_budget!SET_EMAIL_NOTIFICATIONS(
       'budgets_notification_integration',
       'costadmin@example.com, budgetadmin@example.com');
    
    Copy

激活并设置账户预算后,您可以使用自定义角色,启用非管理员用户来监控账户预算。有关更多信息,请参阅 创建自定义角色以监控账户预算

创建自定义预算

您可以使用 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;
Copy

如果要启用预算所有者以外的角色来修改自定义预算的设置,则可以创建具有修改权限的自定义角色。有关更多信息,请参阅 创建自定义角色以管理自定义预算

使用 Snowsight 创建自定义预算

备注

如果账户预算未 激活 或已停用,则无法使用 Snowsight 创建自定义预算。但是,您可以使用 SQL 创建自定义预算

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

  4. 在仪表板的右上角,选择 加号图标 (添加预算)。

  5. 输入 Budget name

  6. 选择要在其中创建预算的数据库和架构。

  7. 输入 Spending limit

  8. 输入用于接收通知的电子邮件地址。

    备注

    添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的电子邮件地址 经过验证,则通知电子邮件设置会失败。

  9. 选择 Resources to monitor

    • 要添加数据库,请展开 Databases 以选择数据库。

    • 要在架构中添加对象,请展开架构以列出可用对象。展开对象类别(例如, TablesTasks)以选择对象。

    • 要添加仓库,请展开 Warehouses 并选择仓库。

    备注

    • 当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。

    • 您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。

当您使用 Snowsight 添加用于接收通知的电子邮件地址时,Snowflake 会在后台进程中创建或更新名为 default_budget_notification_integration 的电子邮件通知集成。如果存在通知集成,Snowflake 会将您输入的新电子邮件地址添加到列表中的现有电子邮件地址。

如果通知集成不存在,Snowflake 会创建通知集成并授予 USAGE 权限。有关详细信息,请参阅 账户预算部分中概述的步骤

创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算

使用 SQL 创建自定义预算

创建自定义预算,然后设置支出限额和通知电子邮件地址。

备注

  1. 查看账户中的现有预算:

    备注

    以下语句会返回您具有访问权限的预算。只有具有 ACCOUNTADMIN 角色的用户才能查看账户中的所有预算。

    SELECT SYSTEM$SHOW_BUDGETS_IN_ACCOUNT();
    
    Copy
  2. 使用 CREATE BUDGET 命令在 budgets_db.budgets_schema 中创建预算 my_budget

    USE SCHEMA budgets_db.budgets_schema;
    
    CREATE SNOWFLAKE.CORE.BUDGET my_budget();
    
    Copy
  3. 设置每月支出限额。例如,将支出限额设置为每月 500 个 Credit:

    CALL my_budget!SET_SPENDING_LIMIT(500);
    
    Copy
  4. 设置通知集成和电子邮件地址:

    备注

    • 如果您尚未创建电子邮件通知集成,请参阅 账户预算部分中的步骤 创建一个。

    • 要发送通知,必须向 SNOWFLAKE 应用程序授予关于通知集成的 USAGE 权限:

      GRANT USAGE ON INTEGRATION budgets_notification_integration
        TO APPLICATION snowflake;
      
      Copy
    CALL my_budget!SET_EMAIL_NOTIFICATIONS('budgets_notification_integration',
                                           'costadmin@example.com');
    
    Copy

创建和设置自定义预算后,您可以创建自定义角色,使非账户管理员能够监控预算资源和使用情况。有关更多信息,请参阅 创建自定义角色以监控自定义预算

要将对象添加到新预算,请参阅 在自定义预算中添加和移除对象

创建自定义角色以管理自定义预算

要监控和修改自定义预算,您可以将权限和实例角色授予自定义角色。有关修改自定义预算必须授予角色的权限和角色的完整列表,请参阅 Budgets 角色和权限

示例

授予自定义角色 budget_admin 在架构 budgets_db.budgets_schema 中监控和修改预算 my_budget 的能力:

备注

只有具有自定义预算的 OWNERSHIP 权限的角色才能执行以下示例。

  1. 例如,为架构 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;
    
    Copy
  2. 向要在其中添加或移除自定义预算的对象授予 APPLYBUDGET 权限。添加或移除每个对象都需要执行此步骤。

    例如,要启用角色 budget_admin,以将数据库 db1 添加到自定义预算 my_budget,请执行以下语句:

    GRANT USAGE ON DATABASE db1 TO ROLE budget_admin;
    
    GRANT APPLYBUDGET ON DATABASE db1 TO ROLE budget_admin;
    
    Copy

    要修改自定义预算中的对象,请参阅 在自定义预算中添加和移除对象

在自定义预算中添加和移除对象

您可以使用 Snowsight 或 SQL 在自定义预算中添加或移除对象。

备注

要在自定义预算中添加或移除对象,您必须使用具有预算和对象的所需权限的角色。有关更多信息,请参阅 创建自定义角色以管理自定义预算

使用 Snowsight 在自定义预算中添加或移除对象

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

  4. 选择要编辑的预算。

  5. 在仪表板的右上角,选择 铅笔图标 (编辑图标)。

  6. 选择 + Resources

    • 要添加或移除数据库,请展开 Databases 以选择或取消选择数据库。

    • 要在架构中添加或移除对象,请展开架构以列出可用对象。展开对象类别(例如,TablesTasks)以选择或取消选择对象。

    • 要添加或移除仓库,请展开 Warehouses 并选择或取消选择仓库。

    备注

    • 当您选择数据库或架构时,数据库或架构中包含的所有 受支持对象 (例如,表)也会添加到预算中。

    • 您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。

  7. 选择 Done

使用 SQL 从自定义预算中添加或移除对象

用于从预算中添加或移除对象的角色必须具有该对象的 APPLYBUDGET 权限。有关更多信息,请参阅 创建自定义角色以管理自定义预算 部分中的示例。

要查看已在自定义预算中的对象列表,请调用预算的 <budget_name>!GET_LINKED_RESOURCES 方法。例如,要查看 budgets_db.budgets_schema 架构中预算 my_budget 中的对象列表,请执行以下语句:

CALL budgets_db.budgets_schema.my_budget!GET_LINKED_RESOURCES();
Copy

该语句返回以下输出:

+-------------+-----------------+-----------+-------------+---------------+
| RESOURCE_ID | NAME            | DOMAIN    | SCHEMA_NAME | DATABASE_NAME |
|-------------+-----------------+-----------+-------------+---------------|
|         326 | DB1             | DATABASE  | NULL        | NULL          |
|         157 | MY_WH           | WAREHOUSE | NULL        | NULL          |
+-------------+-----------------+-----------+-------------+---------------+

对象必须通过 引用 添加到预算或从其中移除。

  1. 您可以按照以下步骤操作,将表 t1 添加到预算 my_budget

    1. 通过执行以下语句将表的 APPLYBUDGET 权限授予角色 budget_admin

      GRANT APPLYBUDGET ON TABLE t1 TO ROLE budget_admin;
      
      Copy
    2. 通过执行以下语句,将对表 t1 的引用传递给 ADD_RESOURCE 实例方法:

      CALL budgets_db.budgets_schema.my_budget!ADD_RESOURCE(
         SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'applybudget'));
      
      Copy

      SYSTEM$REFERENCE 函数创建对 TABLE 对象 t1 的引用,授予对表的 APPLYBUDGET 权限。这使预算能够监控您的账户中的指定对象。函数的第三个参数指定引用的作用域,在本例中,SESSION 创建具有会话作用域的引用。传递给预算的 ADD_RESOURCE 方法的引用可以使用任意瞬态引用作用域(也就是说,第三个参数可以是“SESSION”或“CALL”)创建。

      有关对象和权限的完整列表,请参阅 支持的引用对象类型和权限

      备注

      您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 Budgets 将从第一个自定义预算中移除该对象,而不会发出警告。

  2. 您可以按照以下步骤操作,从预算 my_budget 中移除数据库 db1

    1. 通过执行以下语句将数据库的 APPLYBUDGET 权限授予角色 budget_admin

      GRANT APPLYBUDGET ON DATABASE db1 TO ROLE budget_admin;
      
      Copy
    2. 通过向 REMOVE_RESOURCE 实例方法传递引用来移除数据库:

      CALL budgets_db.budgets_schema.my_budget!REMOVE_RESOURCE(
         SYSTEM$REFERENCE('DATABASE', 'db1', 'SESSION', 'applybudget'));
      
      Copy

创建自定义角色以监控预算

您可以创建供非管理员用户用来监控预算的自定义角色,从而委派预算监控。

创建自定义角色以监控账户预算

您可以创建自定义角色,使非账户管理员用户能够监控账户预算。有关必须授予角色以监控账户预算的权限和角色的完整列表,请参阅 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;
Copy

创建自定义角色以监控自定义预算

您可以创建自定义角色,使非账户管理员用户能够监控自定义预算。有关必须授予角色以监控自定义预算的权限和角色的完整列表,请参阅 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;
Copy

使用 Snowsight 监控预算

您可以使用 Snowsight 中的 Budgets 页面查看当前和历史预算支出。

备注

只有具有 ACCOUNTADMIN 角色或被授予所需权限和角色的用户才能使用 Snowsight 监控预算。

您可以使用 Budgets 中的 Snowsight 页面查看当前和历史预算支出。

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

在预算的 Current Month 视图中,您可以查看截至当天的每日 Credit 使用量。您可以查看您是否可能超出当月的预算。条形图持续到月底,并根据当月的实际 Credit 使用情况显示预计的 Credit 使用量。Spending limit 行指明触发预算通知的支出限额。

Budgets 预计支出图

选择 时钟图标 (要显示的月份),按 Current Month 或更长的时间段筛选视图。

您可以将 Spend (当前 Credit 使用量)与 Interval (当月剩余时间)进行比较,查看支出是否超出了每月预算。

您可以选择 Budgets 图标 Budgets资源图标 Resources 来筛选视图。

  • 您可以在 Budgets 视图中选择自定义预算,获取有关特定预算的详细信息。

    备注

    自定义预算的 Service Type 列表中包括 Unused Resources 类型。当预算中的对象没有可显示的 Credit 使用量数据时,将显示此服务类型。如果对象没有计算成本的 Credit 使用量,或者您最近将对象添加到预算并且 无服务器后台任务 尚未执行,则可能发生这种情况。

  • Resources 视图中,您可以按 Service Type、对象 NameCredit Usage 进行筛选和排序。

停用账户预算

您可以使用 Snowsight 或 SQL 来停用账户预算。

停用账户预算会将账户预算重置为激活前的状态:

  • 将删除所有历史账户预算数据。

  • 账户预算的背景测量任务已暂停。

  • 将重置支出限额和电子邮件通知的账户预算设置。

账户预算停用不会影响自定义预算。要从账户中删除自定义预算,请使用 DROP BUDGET 命令。

备注

如果账户预算已停用,则无法使用 Snowsight 创建新的自定义预算。但是,您可以继续使用 SQL 创建自定义预算

使用 Snowsight 停用账户预算

您可以使用 Budgets 页面停用账户预算:

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

  4. 选择右上角的 ... 更多菜单。

  5. 选择 Deactivate account budget

使用 SQL 停用账户预算

您可以使用 account_root_budget!DEACTIVATE 方法停用账户预算:

CALL snowflake.local.account_root_budget!DEACTIVATE();
Copy
语言: 中文