教程:预算入门

简介

本教程通过设置账户预算和创建监控一组指定对象的自定义预算,向您介绍使用 Budgets 进行账户级别的 Credit 使用量监控。

通过 Budgets,您可以监控受支持对象的计算成本的 Credit 使用量,包括后台维护任务和无服务器功能的 Credit 使用量。Budgets 使您能够为每个预算设置每月支出限额,并在当前支出预计超过每月支出限额时发送通知电子邮件。

您可以使用 Snowsight 中的工作表或使用 CLI 客户端(如 SnowSQL)完成本教程。本教程的某些部分可以使用 Snowsight 完成。

在本教程结束时,您将学习如何执行以下步骤:

  • 创建自定义角色以监控和管理预算。

  • 授予将对象添加到自定义预算所需的权限。

  • 激活和设置账户预算。

  • 创建自定义预算并向其中添加对象。

先决条件

要完成本教程,需要满足以下先决条件:

  • 您必须能够使用 ACCOUNTADMIN 角色来创建本教程中使用的角色。

  • 您必须 验证您的电子邮件地址。只有经过验证的电子邮件地址才能添加到预算通知列表中。

创建通知集成

预算使用通知集成,在当前 Credit 使用量预计超过每月支出限额时发送通知电子邮件。ALLOWED_RECIPIENTS 列表 必须 包括用户的验证电子邮件地址,以接收预算通知。

如果使用 SQL 完成本教程,则需要通知集成。请按照下面的步骤创建一个通知集成。

使用 Snowsight 设置预算时,系统会自动为您创建通知集成。如果您打算使用 Snowsight 设置预算,则可以跳到下一步。

  1. 执行以下语句以创建通知集成。使用 ALLOWED_RECIPIENTS 列表中已验证的电子邮件地址:

    USE ROLE ACCOUNTADMIN;
    
    CREATE NOTIFICATION INTEGRATION budgets_notification_integration
      TYPE=EMAIL
      ENABLED=TRUE
      ALLOWED_RECIPIENTS=('<YOUR_EMAIL_ADDRESS>');
    
    Copy
  2. 创建通知集成后,将 USAGE 权限授予 SNOWFLAKE 应用程序。需要此权限才能使预算使用通知集成发送电子邮件。

    执行以下语句以授予通知集成的 USAGE 权限:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy

创建数据库、架构和自定义角色

在此步骤中,将为教程创建以下对象,以创建、管理和监控预算:

  • 用于创建自定义预算的数据库和架构。

  • 用于管理账户预算的自定义角色。

  • 用于监控账户预算的自定义角色。

  • 用于创建自定义预算的自定义角色。

  1. 使用以下步骤创建数据库和架构,以便在其中创建自定义预算:

    1. 创建要在其中创建自定义预算的数据库和架构:

      USE ROLE ACCOUNTADMIN;
      
      CREATE DATABASE budgets_db;
      
      CREATE SCHEMA budgets_db.budgets_schema;
      
      Copy
  2. 为账户预算管理员创建自定义角色 account_budget_admin。账户预算管理员可以对账户预算执行以下操作:

    • 激活和停用账户预算。

    • 设置支出限额。

    • 编辑通知设置。

    • 监控账户的 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
  3. 创建要授予账户预算监控员的自定义角色 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;
    
    Copy
  4. 创建具有所需角色和权限的自定义角色 budget_owner,以在架构 budgets_db.budgets_schema 中创建自定义预算:

    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
  5. 创建两个自定义角色来管理和监控自定义预算。创建自定义预算后,这两个角色将在本教程稍后部分获得额外权限。要创建自定义角色,请按照以下步骤操作:

    1. 创建一个用于管理和监控自定义预算的自定义 budget_admin 角色:

      USE ROLE ACCOUNTADMIN;
      
      CREATE ROLE budget_admin;
      
      GRANT USAGE ON DATABASE budgets_db TO ROLE budget_admin;
      
      GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO ROLE budget_admin;
      
      GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE budget_admin;
      
      Copy
    1. 创建一个用于监控自定义预算的自定义 budget_monitor 角色:

    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE budget_monitor;
    
    GRANT USAGE ON DATABASE budgets_db TO ROLE budget_monitor;
    
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO ROLE budget_monitor;
    
    GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE budget_monitor;
    
    Copy
  6. 将自定义预算角色授予自己,以便在本教材的后续步骤中使用:

    1. account_budget_admin 角色授予自己:

      GRANT ROLE account_budget_admin
        TO USER <YOUR_USER_NAME>;
      
      Copy
    2. account_budget_monitor 角色授予自己:

      GRANT ROLE account_budget_monitor
        TO USER <YOUR_USER_NAME>;
      
      Copy
    3. budget_owner 角色授予自己:

      GRANT ROLE budget_owner
        TO USER <YOUR_USER_NAME>;
      
      Copy
    4. budget_monitor 角色授予自己:

      GRANT ROLE budget_monitor
        TO USER <YOUR_USER_NAME>;
      
      Copy

在本节中,您创建了自定义角色来管理和监控预算,并创建自定义预算。

为自定义预算创建对象

在此步骤中,创建要添加到自定义预算的对象,并向您在上一步中创建的自定义角色授予权限。您将创建以下对象:

  • 要添加到自定义预算的仓库。

  • 要添加到自定义预算的数据库。

  1. 创建一个仓库,并将仓库的 USAGE 和 APPLYBUDGET 权限授予您创建的自定义角色。需要 APPLYBUDGET 权限才能将对象添加到预算。

    1. 创建仓库 na_finance_wh

      CREATE WAREHOUSE na_finance_wh;
      
      Copy
    2. 向自定义预算角色授予 USAGE 权限:

      GRANT USAGE ON WAREHOUSE na_finance_wh TO ROLE account_budget_admin;
      GRANT USAGE ON WAREHOUSE na_finance_wh TO ROLE account_budget_monitor;
      GRANT USAGE ON WAREHOUSE na_finance_wh TO ROLE budget_admin;
      GRANT USAGE ON WAREHOUSE na_finance_wh TO ROLE budget_owner;
      GRANT USAGE ON WAREHOUSE na_finance_wh TO ROLE budget_monitor;
      
      Copy
    3. 将仓库的 APPLYBUDGET 权限授予 budget_owner 角色:

      GRANT APPLYBUDGET ON WAREHOUSE na_finance_wh TO ROLE budget_owner;
      
      Copy
  2. 创建一个数据库,并将仓库的 APPLYBUDGET 权限授予您创建的自定义预算所有者角色。需要 APPLYBUDGET 权限才能将对象添加到预算。

    1. 创建数据库:

      CREATE DATABASE na_finance_db;
      
      Copy
    2. 将数据库的 APPLYBUDGET 权限授予 budget_owner 角色:

      GRANT APPLYBUDGET ON DATABASE  na_finance_db TO ROLE budget_owner;
      
      Copy

在本节中,您创建了要添加到自定义预算的对象,并授予了将这些对象添加到预算所需的 APPLYBUDGET 权限。您还创建了用于创建自定义预算的数据库和模式,并授予了在架构中创建预算所需的 USAGE 权限。现在,您已准备好激活、创建和设置预算。

激活和设置账户预算

账户预算监控账户中 Budgets 支持的所有对象的计算成本的 Credit 使用量,包括后台维护任务(例如,自动聚类)和无服务器功能。必须先激活账户预算,然后才能开始监控 Credit 使用量。激活后,您可以设置账户的每月支出限额和通知收件人的电子邮件列表。在当前 Credit 使用量预计超过每月支出限额时,Budgets 会发送通知电子邮件。

使用以下步骤激活和设置账户预算:

  1. 使用您在上一步中创建的 account_budget_admin 角色激活账户预算:

    USE ROLE account_budget_admin;
    
    CALL snowflake.local.account_root_budget!ACTIVATE();
    
    Copy
  2. 将账户预算的支出限额设置为每月 500 个 Credit:

    CALL snowflake.local.account_root_budget!SET_SPENDING_LIMIT(500);
    
    Copy
  3. 要设置电子邮件通知列表,请使用您已验证的电子邮件地址和本教程前面创建的通知集成:

    CALL snowflake.local.account_root_budget!SET_EMAIL_NOTIFICATIONS(
       'budgets_notification_integration',
       '<YOUR_EMAIL_ADDRESS>');
    
    Copy

在本节中,您激活了账户预算,并设置了支出限额和接收预算通知的电子邮件地址。

创建自定义预算

现在您已经激活并设置了账户预算,请创建一个自定义预算,以监控账户中指定对象组的 Credit 使用量。在本教程中,将 na_finance_wh 仓库和 na_finance_db 添加到自定义预算中。

通过以下步骤创建自定义预算:

  1. 使用 budget_owner 角色在 budgets_db.budgets_schema 中创建 na_finance_budget 预算:

    USE ROLE budget_owner;
    USE SCHEMA budgets_db.budgets_schema;
    USE WAREHOUSE na_finance_wh;
    
    CREATE SNOWFLAKE.CORE.BUDGET na_finance_budget();
    
    Copy
  2. 使用以下步骤为 na_finance_budget 预算设置每月支出限额和电子邮件通知列表:

    1. 将每月支出限额设置为 500 个 Credit:

      CALL na_finance_budget!SET_SPENDING_LIMIT(500);
      
      Copy
    2. 要设置通知列表,请使用已验证的电子邮件地址和在本教程第一步中创建的通知集成:

      CALL na_finance_budget!SET_EMAIL_NOTIFICATIONS('budgets_notification_integration',
                                                     '<YOUR_EMAIL_ADDRESS>');
      
      Copy
    3. 将数据库 na_finance_db 和仓库 na_finance_wh 添加到预算 na_finance_budget

      CALL na_finance_budget!ADD_RESOURCE(
        SYSTEM$REFERENCE('database', 'na_finance_db', 'SESSION', 'applybudget'));
      
      CALL na_finance_budget!ADD_RESOURCE(
        SYSTEM$REFERENCE('warehouse', 'na_finance_wh', 'SESSION', 'applybudget'));
      
      Copy
  3. 将实例角色授予上一步创建的自定义角色。

    1. 授予 budget_admin 角色所需的角色和权限,以便 budget_admin 角色修改和监控自定义预算 na_finance_budget

      USE ROLE budget_owner;
      
      GRANT SNOWFLAKE.CORE.BUDGET ROLE budgets_db.budgets_schema.na_finance_budget!ADMIN
        TO ROLE budget_admin;
      
      Copy
    2. 将 VIEWER 实例角色授予 budget_monitor 角色,以便 budget_monitor 角色监控自定义预算 na_finance_budget

      USE ROLE budget_owner;
      
      GRANT SNOWFLAKE.CORE.BUDGET ROLE budgets_db.budgets_schema.na_finance_budget!VIEWER
        TO ROLE budget_monitor;
      
      Copy

在本节中,您创建了自定义预算,添加了要监控的预算的对象,并设置了接收预算通知的电子邮件地址。

监控 Credit 使用量

您已完成本教程中的所有步骤,以激活账户预算、创建自定义预算以及创建自定义角色来监控和管理账户预算和自定义预算。填充预算的 Credit 使用量数据需要一些时间。

Budgets 使用无服务器任务来收集您账户中预算的 Credit 使用量。激活账户预算或创建自定义预算后,需要一段时间才能执行无服务器任务。Credit 使用量数据可用后,您可以使用 Snowsight 监控预算的 Credit 使用量。

要在使用数据可用后监控 Credit 使用量,请使用以下步骤:

使用在上一步中创建的 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()
);
Copy

您可以按服务类型监控支出历史记录。要查看过去一周账户预算的搜索优化无服务器功能的支出历史记录,请执行以下语句:

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()
);
Copy

使用 budget_monitor 角色查看自定义预算 na_finance_budget 过去一周的支出历史记录:

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()
);
Copy

清理、总结和其他资源

恭喜!您已成功完成本教程。

在为账户预算和自定义预算填充 Credit 使用量数据后,请参阅 使用 Snowsight 监控预算

总结和要点

概括来说,您学习了如何:

  • 创建自定义角色以管理和监控预算。

    自定义角色使非账户管理员能够监控预算的 Credit 使用量和修改预算设置。有关更多信息,请参阅 Budgets 角色和权限

  • 授予将对象添加到自定义预算所需的权限。

    必须授予对象的 APPLYBUDGET 权限,才能将其添加到自定义预算或从自定义预算中删除。对象通过 引用 添加或删除。有关更多信息,请参阅 在自定义预算中添加和移除对象

  • 激活和设置账户预算。

    必须激活并设置账户预算才能开始监控账户的 Credit 使用量。账户预算监控计算成本,包括后台维护任务和无服务器功能,并在当前支出预计超过每月支出限额时发送电子邮件通知。

    有关更多信息,请参阅 激活账户预算

  • 创建自定义预算,以监控账户中的指定对象组。

    自定义预算监控账户中一组对象的 Credit 使用量。自定义预算监控组中对象的计算成本的 Credit 使用量,包括后台维护任务和无服务器功能。

    有关更多信息,请参阅 创建自定义预算

有关详细信息,请参阅以下主题:

删除在教程中创建的对象

您可以选择保留在教程中创建的自定义角色和自定义预算,以监控 Credit 使用量。否则,请删除预算和相关的自定义角色:

要删除在教程中创建的自定义预算,请执行以下语句:

USE ROLE budget_owner;

DROP SNOWFLAKE.CORE.BUDGET budgets_db.budgets_schema.na_finance_budget;
Copy

要删除在本教程中创建的对象,请执行以下语句:

USE ROLE ACCOUNTADMIN;

DROP DATABASE na_finance_db;
DROP WAREHOUSE na_finance_wh;
DROP DATABASE budgets_db;
Copy

要删除为管理和监控自定义预算而创建的自定义角色,请执行以下语句:

USE ROLE ACCOUNTADMIN;

DROP ROLE budget_monitor;
DROP ROLE budget_admin;
DROP ROLE budget_owner;
Copy

Snowflake 建议保持账户预算处于激活状态。但是,如果您决定停用它,请参阅 停用账户预算 以了解更多信息和说明。

要删除账户预算监控员和管理员角色,请执行以下语句:

USE ROLE ACCOUNTADMIN;

DROP ROLE account_budget_monitor;
DROP ROLE account_budget_admin;
Copy

要删除通知集成,请执行以下语句:

USE ROLE ACCOUNTADMIN;

DROP NOTIFICATION INTEGRATION budgets_notification_integration;
Copy

其他资源

请使用以下资源继续了解预算和 Snowflake:

语言: 中文