カスタム予算

カスタム予算を使用すると、オブジェクトのカスタムグループのコンピューティングコストを監視できます。次の2つの方法で監視するオブジェクトを指定できます。

  • 予算にタグを追加します。指定されたタグ/値ペアを持つすべてのオブジェクトは、予算によって監視されます。

  • 各オブジェクトを個別に予算に追加します。

同じ予算が、個別に追加されたオブジェクトと、タグを使用して追加されたオブジェクトを追跡します。オブジェクトが複数の理由で予算に含まれている場合(たとえば、オブジェクトが個別に追加され、指定されたタグ/値ペアを持つ場合)、そのオブジェクトのクレジット使用状況は予算の支出制限に対して1回だけカウントされます。

カスタム予算にオブジェクトを追加すると、予算はバックグラウンドのメンテナンス操作やサーバーレス機能を含む、オブジェクトのすべての計算コストを監視します。たとえば、カスタム予算にテーブルを追加し、そのテーブルで自動クラスタリングを有効にした場合、予算は自動クラスタリングのバックグラウンドメンテナンスのクレジット使用状況を監視します。

タグを使用したオブジェクトの監視

タグ は予算に適用して、アカウント内の理論ユニットに属するオブジェクトによってクレジット使用状況を監視できます。cost_center タグを使用して組織内のコストセンターによって発生したコストを追跡するとします。営業チームに帰属するすべてのオブジェクトにタグ/値ペア cost_center = 'sales' をタグ付けできます。営業チームが使用する各オブジェクトを予算に個別に追加するのではなく、タグ/値ペア cost_center = 'sales' を単純に追加することができます。予算は、そのタグ/値ペアが割り当てられたすべてのオブジェクトのクレジット使用状況を自動的に監視します。

タグ継承

タグを予算に追加すると、親オブジェクトからタグを継承したオブジェクトを含め、そのタグを持つすべてのオブジェクトが追跡されます。たとえば、データベースにタグがある場合、データベース内のテーブルはタグを継承し、予算によって追跡されます。予算はタグ/値ペアに基づいて使用状況を追跡するため、テーブルレベルでタグの値を上書きすると、予算がテーブルに関連付けられた使用状況を追跡するかどうか変更される可能性があります。たとえば、タグ team = 'eng' を持つオブジェクトを追跡する予算があるとします。データベースにタグ team = 'eng' があり、データベース内のテーブルにタグ team = 'IT' がある場合、予算はそのテーブルに関連するコストを監視しません。

予算のコンテキストでは、アカウント予算はそのユースケースを達成することを目的としているため、タグはアカウントから継承されません。

タグ値の上書き方法などの詳細については、タグ継承 をご参照ください。

複数の予算を持つオブジェクトの追跡

複数の予算は同じタグ/値ペアを追加できます。つまり、複数の予算は同じオブジェクトのクレジット使用状況を追跡できます。たとえば、タグ cost_center = 'eng'budget_1budget_2 の両方に追加するとします。タグ cost_center = 'eng' を持つウェアハウスがクレジットを消費すると、budget_1budget_2 両方のクレジット上限に対してカウントされます。

オブジェクトに複数のタグがある場合は、複数の予算がオブジェクトを追跡することもできます。たとえば、ウェアハウスに2つのタグ(cost_center = 'finance' および stage = 'dev')があるとします。cost_center = 'finance' を追跡する予算と stage = 'dev' を追跡する予算を作成できます。ウェアハウスによって消費されたクレジットは、両方の予算のクレジット上限に対してカウントされます。

制限と考慮事項

タグを使用してオブジェクトを監視する場合は、次の点に注意してください。

  • オブジェクトのタグを変更すると、タグを使用する予算に変更が反映されるまでに最大6時間かかる場合があります。

  • 現在、アラートはタグを使用して監視することはできません。個別に追加する必要があります。

  • 月の最初の2日間にタグを変更すると、前月の使用状況に反映されます。

カスタム予算でサポート対象となるオブジェクト

以下のタイプのSnowflakeオブジェクトを監視するカスタム予算を作成できます。

オブジェクト

監視されたコスト

アラート

サーバーレスアラートはアカウント予算によって監視されます。ユーザー管理ウェアハウスを使用して実行されるアラートのクレジット使用状況を監視するには、そのウェアハウスを予算に追加する必要があります。アラートのコストについては、 警告のコストの理解 をご覧ください。

アプリ . (Snowflake Native Apps)

Snowflake Native App によって作成され所有されているオブジェクトの予算の動作は、アプリを直接追加するか、タグを追加するかによって異なります。

  • タグを使用して Snowflake Native App を予算に追加すると、ウェアハウスが共有されているかに関係なく、一致するタグ/値の組み合わせを持つウェアハウスのみが自動的に追跡されます。

  • Snowflake Native App を予算に直接追加すると、クレジットを消費し、アプリによって作成され所有されるすべてのオブジェクトが自動的に予算に追加されます。これには、アプリが所有するウェアハウスや Snowpark Container Services コンピューティングプールが含まれます。共有されているウェアハウスやコンピューティングプールは、予算では自動的に追跡されませんが、手動で追加することができます。

    アプリが作成し所有するオブジェクトを別の予算に追加することはできません。共有するウェアハウスやコンピューティングプールを別の予算に追加することができます。

    ウェアハウスまたはコンピューティングプールがアプリによって所有されているかどうかを判断するには、以下を確認してください。

    • ウェアハウスについては、 SHOW WAREHOUSES コマンドを実行してください。owner_role_type 列の値が APPLICATION の場合、ウェアハウスは Snowflake Native App によって所有されています。

    • コンピューティングプールの場合は、 SHOW COMPUTE POOLS コマンドを実行します。application 列の値が NULL でない場合、コンピューティングプールは Snowflake Native App によって所有されています。

コンピューティングプール

Snowpark Container Servicesのコンピューティングプールの使用状況。詳細については、 コンピューティングプールコスト をご参照ください。

データベース

データベースを予算に追加すると、そのデータベースに含まれるすべてのサポート対象オブジェクトも自動的に追加されます。予算は以下のオブジェクトとサーバーレス機能のクレジット使用状況を監視します。

  • 上記のスキーマオブジェクトをサポートしています。

  • セカンダリ(レプリカ)データベースの複製。

    注釈

    複製グループまたはフェールオーバーグループで複製されるセカンダリデータベースの複製コストは、アカウント予算でのみ監視できます。

マテリアライズドビュー

マテリアライズドビューのバックグラウンドメンテナンス。詳細については、 マテリアライズドビューのコスト をご参照ください。

スキーマ

スキーマを予算に追加すると、スキーマが含むすべてのサポート対象オブジェクトも自動的に追加されます。予算は上記のようにスキーマオブジェクトのクレジット使用状況を監視します。

パイプ

Snowpipeを使用したデータ読み込み中のリソース消費。詳細については、 Snowpipeコスト をご参照ください。

テーブル

自動クラスタリング および 検索最適化 がテーブル上で有効になっている場合のバックグラウンドメンテナンス操作。

タスク

サーバーレスのタスクはカスタム予算によって監視されます。ユーザーが管理するウェアハウスを使用して実行されるタスクのクレジット使用状況を監視するには、そのウェアハウスを予算に追加する必要があります。詳細については、 タスクのコスト をご参照ください。

ウェアハウス

クエリ実行、ウェブインターフェイス、その他の機能(仮想ウェアハウスのクレジット使用状況 を参照)、サーバーレスタスク、 クラウドサービスのコンピューティング のためのコンピューティングリソース。

詳細については、 カスタム予算に対してタグを追加または削除する をご参照ください。

カスタム予算の作成

次のセクションでは、カスタム予算の作成方法について説明します。

Snowsight を使用するか、 SQL ステートメントを実行することで、 カスタム予算を作成できます。

予算を作成するためにカスタムロールを作成する

カスタムロールを使用して、アカウントに予算を作成できます。カスタム予算を作成するためにロールに付与する必要がある権限とロールの包括的なリストについては、 Budgetのロールと権限 をご参照ください。

以下の例では、 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. Select the Budgets tab.

  4. Select + Budget.

  5. Basic Information ページで、次の手順を実行します。

    1. Location to store ドロップダウンから、予算を作成するデータベースとスキーマの名前を選択します。

    2. Name フィールドで、カスタム予算の名前を指定します。

    3. Budget (credits per month) フィールドで、予算の支出制限を指定します。

    4. 予算更新間隔 を減らして支出をより密接に観察できるようにするには、 Enable low latency budget を選択します。

    5. Threshold フィールドで、予算制限の割合を指定します。Snowflakeが支出制限のこの割合を超えると判断した場合、通知が送信されます。

    6. In the Notify field, enter email addresses to receive notification emails.

      注釈

      予算の通知用に追加された各メールアドレスは、 検証済み である必要があります。リスト内のメールアドレスが 検証されていない 場合、通知メールの設定は失敗します。

    7. Select Next.

  6. On the Budget scope page, add the objects that you want to add to the custom budget.

    • タグを使用 してオブジェクトによる消費を追跡するには、次のステップを実行します。

      1. Select the Tags on resources drop-down list.

      2. 適切なタグを見つけて展開し、1つ以上の値を選択します。

      3. Done を選択します。

    • 予算に個々のオブジェクトを追加する場合は、以下の手順を実行します。

      1. Select the Resources drop-down list.

      2. 1つ以上のオブジェクトを選択します。

      3. Done を選択します。

        注釈

        If you are directly adding individual objects, you can only add an object to one custom budget. In this case, if an object is currently included in one custom budget and you add that object to a second custom budget, Budgets removes the object from the first custom budget without issuing a warning.

        この動作は、タグを使用してオブジェクトを予算に追加する場合には適用されません。タグを使用してオブジェクトを予算に追加する場合、1つ以上のタグを持つオブジェクトを複数のカスタム予算に含めることができます。

  7. Select Create.

カスタム予算を作成して設定した後、カスタムロールを作成して、アカウント管理者以外の人が予算のリソースと使用状況をモニターできるようにすることができます。詳細については、 カスタム予算をモニターするカスタムロールを作成する をご参照ください。

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クレジットに設定します。

    CALL my_budget!SET_SPENDING_LIMIT(500);
    
    Copy
  4. 予算に関する通知をセットし、クレジットの使用状況が支出制限を超えると予想される場合に通知を受け取れるようにします。

    予算に関する通知 をご参照ください。

カスタム予算を作成して設定した後、カスタムロールを作成して、アカウント管理者以外の人が予算のリソースと使用状況をモニターできるようにすることができます。詳細については、 カスタム予算をモニターするカスタムロールを作成する をご参照ください。

新しい予算にオブジェクトを追加するには、 カスタム予算に対してオブジェクトを追加または削除する をご参照ください。

カスタム予算を管理するカスタムロールを作成する

カスタム予算をモニターおよび変更するには、カスタムロールに権限とインスタンスロールを付与します。カスタム予算を変更するためにロールに付与する必要がある権限とロールの包括的なリストについては、 Budgetのロールと権限 をご参照ください。

カスタムロールの例

カスタムロール 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;
    
    Copy
  • カスタム予算に追加またはカスタム予算から削除するオブジェクトとタグに、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 を使って、カスタム予算に対してタグを追加または削除できます。予算に追加された各タグには、タグの1つ以上の値が含まれます。

注釈

カスタム予算からタグを追加または削除するには、予算とタグに対する必要な権限を持つロールを使用する必要があります。詳細については、 カスタム予算を管理するカスタムロールを作成する をご参照ください。

Snowsight を使用してカスタム予算に対してタグを追加または削除する

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Admin » Cost management を選択します。

  3. Budgets を選択します。

  4. 編集する予算を選択します。

  5. ダッシュボードで、|sf-pencil-icon|(編集アイコン)を選択します。

  6. + Tags & resources を選択します。

  7. Tags を展開し、追加するタグにナビゲートします。

  8. 次のいずれかを実行します。

    • タグに 許可された値のリスト がある場合は、1つ以上の値を選択します。

    • タグを任意の値に設定できる場合は、値を指定します。

  9. Done を選択します。

注釈

Snowsight で予算にタグを追加する場合、次の点に注意してください。

  • タグを予算に追加する前に、少なくとも1つのオブジェクトにタグを適用する必要があります。

  • タグをオブジェクトに追加してから表示されるまで最大2時間かかる場合があります。

SQL コマンドを使用して、カスタム予算に対してタグを追加または削除する

予算からタグを追加または削除するために使用されるロールには、タグに対する APPLYBUDGET 権限が必要です。詳細については、 カスタム予算を管理するカスタムロールを作成する セクションの例をご参照ください。

カスタム予算に既にあるタグのリストを確認するには、予算の <budget_name>!GET_LINKED_TAGS メソッドを呼び出します。たとえば、budgets_db.budgets_schema スキーマの予算 my_budget にあるタグのリストを見るには、以下のステートメントを実行します。

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

タグの予算への追加や予算からの削除は、 参照 によって行う必要があります。

  1. 以下の手順で、タグ cost_mgmt_db.tags.cost_center を予算 my_budget に追加できます。

    1. 以下のステートメントを実行することで、 budget_admin ロールにタグに対する APPLYBUDGET 権限を付与します。

      GRANT APPLYBUDGET ON TAG cost_center TO ROLE budget_admin;
      
      Copy
    2. :doc:` ADD_TAG</sql-reference/classes/budget/methods/add_tag>`インスタンスメソッドにタグ cost_center の参照を渡すには、以下のステートメントを実行します。タグの値は finance に設定されます。

      CALL budgets_db.budgets_schema.my_budget!ADD_TAG(
         SELECT SYSTEM$REFERENCE('TAG',
            'cost_mgmt_db.tags.cost_center',
            'SESSION',
            'applybudget'),
            'finance');
      
      Copy

      SYSTEM$REFERENCE 関数は、タグに対する APPLYBUDGET 権限が付与された、 タグ cost_center の参照を作成します。これにより、予算はアカウントに指定されたタグ/値ペアを持つアカウント内のオブジェクトを監視できるようになります。関数の3番目のパラメーターは、参照のスコープを指定し、この場合、「SESSION」はセッションスコープの参照を作成します。予算の ADD_TAG メソッドに渡される参照は、任意の一時的な参照スコープで作成できます(つまり、3番目のパラメーターは「SESSION」または「CALL」のいずれかにできます)。

  2. 以下の手順で、予算 my_budget からタグ `cost_center ` を削除できます。

    1. 以下のステートメントを実行することで、 budget_admin ロールにテーブルに対する APPLYBUDGET 権限を付与します。

      GRANT APPLYBUDGET ON TAG cost_center TO ROLE budget_admin;
      
      Copy
    2. REMOVE_TAG インスタンスメソッドに参照を渡してタグを削除します。

      CALL budgets_db.budgets_schema.my_budget!REMOVE_TAG(
         SELECT SYSTEM$REFERENCE('TAG',
            'cost_mgmt_db.tags.cost_center',
            'SESSION',
            'applybudget'),
            'finance');
      
      Copy

カスタム予算に対してオブジェクトを追加または削除する

Snowsight または SQL を使って、カスタム予算に対してオブジェクトを追加または削除できます。

注釈

カスタム予算からオブジェクトを追加または削除するには、予算とオブジェクトに対する必要な権限を持つロールを使用する必要があります。詳細については、 カスタム予算を管理するカスタムロールを作成する をご参照ください。

Snowsight を使用してカスタム予算からオブジェクトを追加または削除する

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Admin » Cost management を選択します。

  3. Budgets を選択します。

  4. 編集する予算を選択します。

  5. ダッシュボードで、|sf-pencil-icon|(編集アイコン)を選択します。

  6. + Tags & resources を選択して、カスタム予算に追加するオブジェクトを選択します。

    注釈

    • データベースまたはスキーマを選択すると、データベースまたはスキーマに含まれる サポートされたオブジェクト (例: テーブル)もすべて予算に追加されます。

    • If you are directly adding individual objects, you can only add an object to one custom budget. In this case, if an object is currently included in one custom budget and you add that object to a second custom budget, Budgets removes the object from the first custom budget without issuing a warning.

      この動作は、タグを使用してオブジェクトを予算に追加する場合には適用されません。タグを使用してオブジェクトを予算に追加する場合、1つ以上のタグを持つオブジェクトを複数のカスタム予算に含めることができます。

  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. 以下のステートメントを実行することで、 budget_admin ロールにテーブルに対する APPLYBUDGET 権限を付与します。

      GRANT APPLYBUDGET ON TABLE t1 TO ROLE budget_admin;
      
      Copy
    2. ADD_RESOURCE のインスタンスメソッドにテーブル t1 の参照を渡すには、以下のステートメントを実行します。

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

      SYSTEM$REFERENCE 関数は、テーブルに対する TABLE 権限が付与された、 t1 オブジェクト APPLYBUDGET の参照を作成します。これにより、予算はアカウント内の指定されたオブジェクトをモニターできるようになります。関数の3番目のパラメーターは、参照のスコープを指定し、この場合、「SESSION」はセッションスコープの参照を作成します。予算の ADD_RESOURCE メソッドに渡される参照は、任意の一時的な参照スコープで作成できます(つまり、3番目のパラメーターは「SESSION」または「CALL」のいずれかにできます)。

      注釈

      予算に Snowflake Native App を追加する場合は、 SYSTEM$REFERENCE を呼び出す際、 object_type 引数に 'DATABASE''APPLICATION' ではない)を指定します。

      オブジェクトと権限の包括的なリストについては、 参照のサポートされるオブジェクト型と権限 をご参照ください。

      注釈

      If you are directly adding individual objects, you can only add an object to one custom budget. In this case, if an object is currently included in one custom budget and you add that object to a second custom budget, Budgets removes the object from the first custom budget without issuing a warning.

      この動作は、タグを使用してオブジェクトを予算に追加する場合には適用されません。タグを使用してオブジェクトを予算に追加する場合、1つ以上のタグを持つオブジェクトを複数のカスタム予算に含めることができます。

  2. 以下の手順で、予算 my_budget からデータベース db1 を削除できます。

    1. 以下のステートメントを実行することで、 budget_admin ロールにテーブルに対する APPLYBUDGET 権限を付与します。

      GRANT APPLYBUDGET ON DATABASE db1 TO ROLE budget_admin;
      
      Copy
    2. REMOVE_RESOURCE インスタンスメソッドに参照を渡してデータベースを削除します。

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