激活账户预算或创建自定义预算

要使用 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;
Copy

使用 Snowsight 激活账户预算

备注

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

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

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

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

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

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

    备注

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

  8. 选择 Finish Setup

使用 SQL 命令激活账户预算

备注

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

  1. 通过在 SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET 对象上调用 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. 设置预算通知,以便在 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;
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 以选择仓库。

    • 要添加计算池,请展开 Compute Pools 以选择计算池。

    备注

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

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

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

使用 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. 设置预算通知,以便在 Credit 使用量预计超过支出限额时接收通知。

    请参阅 处理预算通知

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

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

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

要监控和修改自定义预算,您可以将权限和实例角色授予自定义角色。有关修改自定义预算必须授予角色的权限和角色的完整列表,请参阅 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 DATABASE ROLE SNOWFLAKE.USAGE_VIEWER 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

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

处理预算通知

要在 Credit 使用量预计超过支出限额时接收通知,您必须设置预算,以便可以将通知发送到您选择的目的地。您可以通过以下方式接收通知:

  • 电子邮件。

  • 消息推送到由云服务提供的队列(Amazon SNS、Azure 事件网格或 Google Cloud PubSub)。

  • 对 Slack、Microsoft Teams 或 PagerDuty 的 Webhook 的调用。

接下来的各部分介绍如何设置通知以及如何解读通知消息:

设置电子邮件通知

要设置电子邮件通知,请执行以下操作:

  1. (可选)如果您想使用自己的通知集成,请创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。

    1. 创建一个通知集成,并将 TYPE = EMAIL 和 ALLOWED_RECIPIENTS 设置为收件人的已验证电子邮件地址列表。有关信息,请参阅 创建电子邮件通知集成限制可接收通知的电子邮件地址列表

      备注

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

      例如:

      CREATE NOTIFICATION INTEGRATION budgets_notification_integration
        TYPE = EMAIL
        ENABLED = TRUE
        ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
      
      Copy
    2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

      例如,您可以以 JSON 格式发送测试消息:

      CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
        SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
      );
      
      Copy
    3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

      GRANT USAGE ON INTEGRATION budgets_notification_integration
        TO APPLICATION snowflake;
      
      Copy
  2. 指定应接收通知的电子邮件地址。如果您创建或选择了要使用的通知集成,请将通知集成与预算关联。

    为此,请调用 <budget_name>!SET_EMAIL_NOTIFICATIONS 方法,并指定以下内容:

    • 如果您没有想要使用的通知集成,请传入一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
    • 如果您有想要使用的通知集成,请传入该集成的名称和一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
  3. 如果您将通知集成与预算关联,可以通过调用 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME 方法来验证预算是否与通知集成关联。此方法返回与预算相关的电子邮件通知集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

设置队列通知

要设置队列通知,请执行以下操作:

  1. 创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 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>';
    
    Copy

    备注

    对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。

  2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

    例如,您可以以 JSON 格式发送测试消息:

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. 将通知集成与预算关联。调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  5. 验证通知集成是否与预算相关。

    调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法打印出与预算相关的通知集成列表。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。

    +----------------------------------+------------------------+------------+
    |  INTEGRATION_NAME                | LAST_NOTIFICATION_TIME | ADDED_DATE |
    +----------------------------------+------------------------+------------+
    | budgets_notification_integration | -1                     | 2024-09-23 |
    +----------------------------------+------------------------+------------+
    

设置 Webhook 通知

要设置 Webhook 通知,请执行以下操作:

  1. 创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 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;
    
    Copy

    备注

    对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。

  2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

    例如,您可以以 JSON 格式发送测试消息。确保转义 JSON 字符串中的双引号和反斜杠:

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. 如果您正在使用依赖于密钥的 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;
    
    Copy
  5. 将通知集成与预算关联。

    调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  6. 验证通知集成是否与预算相关。

    调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法,该方法会打印出与预算相关的通知集成列表。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。

    +----------------------------------+------------------------+------------+
    |  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"
}
Copy

该 JSON 对象包含以下键值对:

描述

account_name

您的账户名称。

budget_name

您的预算名称。对于账户预算,名称是 ACCOUNT_ROOT_BUDGET

type

通知的类型(例如,BUDGET_LIMIT_WARNING)。

limit

您为预算设定的支出限额。

spending

本月的 Credit 使用量。

spending_percent

已经花费的支出限额百分比 (spending / limit)。

spending_trend_percent

预计到月底将花费的支出限额百分比 (spending_percent / time_percent * 100)。

time_percent

本月已过去的时间百分比(例如,如果本月过了一半,则为 50.00)。

检查有关预算的通知历史记录

要查看有关预算的通知历史记录,请调用 NOTIFICATION_HISTORY 函数并按集成名称进行筛选。例如:

SELECT * FROM TABLE(
  INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
    INTEGRATION_NAME=>'budgets_notification_integration'
  )
);
Copy

表示预算通知的行对应的 message_source 列包含 BUDGET

从预算中移除通知集成

要从预算中移除通知集成,请调用 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。例如:

CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
  'budgets_notification_integration',
);
Copy

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

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

备注

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

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

  1. 登录 Snowsight。

  2. 选择 Admin » Cost Management

  3. 选择 Budgets

  4. 选择要编辑的预算。

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

  6. 选择 + Resources

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

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

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

    • 要添加或移除计算池,请展开 Compute Pools 以选择或取消选择计算池。

    备注

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

    • 您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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          |
+-------------+-----------------+-----------+-------------+---------------+

备注

该列表不包括自动添加的对象(例如,由 Snowflake Native App 创建和拥有的计算池和仓库)。

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

  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”)创建。

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

      备注

      如果您想在预算中添加 Snowflake Native App,当您调用 SYSTEM$REFERENCE 时,请为 object_type 实参指定 'DATABASE'``(而不是 ``'APPLICATION')。

    备注

    您只能将对象添加到一个自定义预算。如果对象当前包含在一个自定义预算中,并且您将该对象添加到第二个自定义预算中,则 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_monitor;
 
GRANT APPLICATION ROLE SNOWFLAKE.BUDGET_VIEWER TO ROLE account_budget_monitor;

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE account_budget_monitor;
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 DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE budget_monitor;
Copy

监控预算

您可以使用 Snowsight 或 SQL 监控预算。

使用 Snowsight 监控预算

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

备注

只有具有 ACCOUNTADMIN 角色或被授予所需权限和角色的用户才能使用 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 进行筛选和排序。

使用 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()
);
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 在架构 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()
);
Copy

您可以按服务类型监控支出历史记录。例如,要查看预算中包含的物化视图的支出历史记录,请执行以下语句:

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

有关更多信息,请参阅 预算方法

禁用预算通知

要禁用预算通知,请调用 SET_NOTIFICATION_MUTE_FLAG 方法,并将 TRUE 作为实参传入。例如:

CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
Copy

停用账户预算

您可以使用 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
语言: 中文