予算のトラブルシューティング

This topic explains how to monitor budgets for problems and provides solutions to common issues.

Using an event table to monitor budgets

You can use an event table to collect telemetry data related to budgets. After Snowflake starts collecting the data in the event table, you can query the table, create a stream to track changes, or set alerts to send notifications when certain events occur.

If you want to collect telemetry data for budgets, you must enable the ENABLE_BUDGET_EVENT_LOGGING account parameter. To start collecting data, run the following command:

ALTER ACCOUNT SET ENABLE_BUDGET_EVENT_LOGGING = TRUE;
Copy

Understanding the events

The following table describes the values in the event table that correspond to budget events so you can focus on the appropriate events. For detailed information about the structure of an event table, see イベントテーブル列.

Event table column

Field

Value

Description

resource_attributes

snow.cost.budget.id

budget_id

Unique ID of the budget instance.

snow.cost.budget.name

budget_name

Fully qualified name of the budget instance.

scope

name

snow.cost.budget

Constant identifier for all budget telemetry events.

record_type

n/a

EVENT

Indicates a budget log event.

record

name

event_name

Descriptive event name. Possible values include the following:

  • BUDGET_UNVERIFIED_RECIPIENTS --- Occurs when email addresses are not in the integration's allowed recipients list or there are email addresses that are not verified.

  • BUDGET_INVALID_INTEGRATION --- Occurs when a notification integration doesn't exist or the user lacks access to it.

severity_text

INFO, WARNING, or ERROR

Severity level of budget event.

value

message

message

Descriptive event message, often including contextual details such as an integration name or operation.

Use the following examples to better understand how to identify budget events in an event table.

Query: Find all events related to the propagation of all budgets within the account
SELECT
    TIMESTAMP,
    RESOURCE_ATTRIBUTES,
    SCOPE,
    RECORD_TYPE,
    RECORD,
    VALUE
  FROM SNOWFLAKE.TELEMETRY.EVENTS
  WHERE
    RECORD_TYPE = 'EVENT' AND
    SCOPE['name'] = 'snow.cost.budget';
Copy
Query: Find all events related to a specific budget (for example, MY_DB.SCH1.MY_BUDGET)
SELECT
    TIMESTAMP,
    RESOURCE_ATTRIBUTES,
    SCOPE,
    RECORD_TYPE,
    RECORD,
    VALUE
  FROM SNOWFLAKE.TELEMETRY.EVENTS
  WHERE
    RECORD_TYPE = 'EVENT' AND
    SCOPE['name'] = 'snow.cost.budget'
    AND RESOURCE_ATTRIBUTES['snow.cost.budget.name'] ILIKE 'MY_DB.SCH1.MY_BUDGET';
Copy

Troubleshooting specific problems

次のシナリオは、 予算を作成または編集する際に発生する可能性のある問題のトラブルシューティングに役立ちます。

アカウント予算をアクティブ化できない

アカウント予算をアクティブ化できない理由は複数あります。

エラー

Unknown user-defined function SNOWFLAKE.LOCAL.ACTIVATE

原因

Snowflakeアカウントが新しい場合、アカウント予算はまだアカウントで利用できません。

解決策

新しく作成したアカウントでアカウント予算が利用できるようになるまで待ちます。利用できるようになると、アクティブ化できます。

エラー

FAILURE: Uncaught exception of type 'BUDGET_ALREADY_ACTIVATED' on line X at position X

原因

アカウント予算はすでにアクティブ化されています。

解決策

<budget_name>!GET_CONFIG メソッドを呼び出すと、アクティブ化のタイムスタンプが表示されます。

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

エラー

-20000 (P0001): Uncaught exception of type 'NO_PERMISSION_TO_ACTIVATE_BUDGET' on line X at position X

原因

アカウントはまだBudgets機能をサポートしていません。

解決策

予算機能は、Govリージョンのアカウントでは使用できません。将来のリリースでGovリージョンをサポートする予定です。

カスタム予算を作成できない

カスタム予算を作成できない理由は複数あります。

エラー

FAILURE: SQL access control error: Insufficient privileges to operate on class 'BUDGET'

原因

使用しているロールにカスタム予算を作成する権限がありません。

解決策

必要な権限を持つロールを使用します。 予算を作成するためにカスタムロールを作成する をご参照ください。

エラー

FAILURE: Uncaught exception of type 'STATEMENT_ERROR' on line 0 at position -1 :
Uncaught exception of type 'UNSUPPORTED_BUDGET_TYPE' on line X at position X

原因

コンストラクターメソッドに引数を渡して予算を作成しています。

解決策

CREATE BUDGET を参照して、作成したステートメントを編集します。

カスタム予算をアクティブ化できない

エラー

FAILURE: Uncaught exception of type 'STATEMENT_ERROR' on line 0 at position -1 :
Uncaught exception of type 'UNSUPPORTED_BUDGET_TYPE' on line X at position X

原因

カスタム予算で ACTIVATE メソッドを呼び出そうとしました。

解決策

ACTIVATE メソッドはアカウント予算でのみ使用できます。カスタム予算を作成したら、 <budget_name>!SET_SPENDING_LIMIT<budget_name>!SET_EMAIL_NOTIFICATIONS メソッドを使用して予算を構成し、通知メールの受信を開始します。

アカウント予算のメソッドを呼び出すことができない

アカウント予算でメソッドを呼び出すと失敗する理由は複数あります。

エラー

-20000 (P0001): Uncaught exception of type 'FUNCTION_NOT_SUPPORTED_FOR_ACCOUNT_ROOT_BUDGET' on line 11 at position 18

原因

アカウント予算で次のいずれかのメソッドを呼び出そうとしました。

解決策

これらのメソッドはアカウント予算では使用できません。アカウント予算はアカウントでサポートされているすべてのオブジェクトを監視し、オブジェクトは追加または削除できません。詳細については、 アカウント予算およびカスタム予算 をご参照ください。

エラー

-20000 (P0001): Uncaught exception of type 'ACCOUNT_ROOT_BUDGET_NOT_ACTIVATED' on line X at position X

原因

アカウント予算が有効になる前に、アカウント予算でメソッドを呼び出そうとしました。

解決策

アカウント予算をアクティブ化します

カスタム予算からオブジェクトを追加または削除することはできません

カスタム予算からのオブジェクトの追加や削除を成功させるには、メソッドを呼び出すために使用されるロールが 必要な権限とロール を持っている必要があります。

エラー

002141 (42601): SQL compilation error:
Unknown user-defined function <budget_db>.<budget_schema>.<budget_name>!ADD_RESOURCE

原因

インスタンスメソッドの呼び出しに使用したロールには、予算からオブジェクトを追加(または削除)するために必要な権限がありません。

解決策

メソッドの呼び出しに使用されるロールに、必要なインスタンスロールと権限を付与します。詳細については、 カスタム予算をモニターするカスタムロールを作成する をご参照ください。

エラー

002003 (02000): SQL compilation error:
<object_type> '<object_name>' does not exist or not authorized.

原因

カスタム予算にオブジェクトを追加しようとしましたが、メソッドの呼び出しに使用したロールに必要な権限がありません。

解決策

予算からオブジェクトを追加(または削除)するには、メソッドの呼び出しに使用されるロールがオブジェクトに対してAPPLYBUDGET権限を持っている必要があります。親オブジェクトがデータベースまたはスキーマの場合、そのオブジェクトを含むデータベースとスキーマのUSAGE権限も必要です。

詳細については、 必須オブジェクト権限 リストをご参照ください。

エラー

Uncaught exception of type 'EXPRESSION_ERROR' on line 10 at position 21 :
Privilege 'APPLYBUDGET' is not authorized on the reference object.

原因

SYSTEM $ REFERENCE ステートメントで PRIVILEGE パラメーターを指定せずにオブジェクトの参照を作成しようとしました。

解決策

オブジェクトの APPLYBUDGET 権限で参照を作成します。

エラー

505001 (55000): Uncaught exception of type 'EXPRESSION_ERROR' on line 10
at position 21 : Specified object does not exist or not authorized for
the reference.

原因

このエラーメッセージには複数の原因があります。

  • インライン SYSTEM $ REFERENCE ステートメントを使用して SNOWFLAKE データベースをカスタム予算に追加しようとしました。

  • オブジェクトの参照を作成するために必要な権限がありません。オブジェクトを予算に追加するには、有効な参照が必要です。

解決策

  • SNOWFLAKE データベースは予算に追加できません。詳細については、 ADD_RESOURCE の使用上の注意 をご参照ください。

  • 予算に追加したいオブジェクトに必要な権限を付与します。詳細については、 必須オブジェクト権限 リストをご参照ください。

予算のメール通知は設定できません

以下のシナリオは、 <budget_name>!SET_EMAIL_NOTIFICATIONS メソッドを呼び出す際の一般的な問題のトラブルシューティングに役立ちます。

エラー

Unknown user-defined function <database_name>.<schema_name>.<budget_name>.SET_EMAIL_NOTIFICATIONS

原因

カスタム予算の電子メール通知を設定するために使用したロールに、 ADMIN インスタンスロールがありません。

解決策

必要な権限とロールを持つロールを使用します。SET_EMAIL_NOTIFICATIONS については、 アクセス制御の要件 をご参照ください。

エラー

Integration '<INTEG_NAME>' does not exist or not authorized.

原因

通知統合が存在しません。

解決策

有効な通知統合を使用します。詳細については、 メール通知統合の作成 をご参照ください。ALLOWED_RECIPIENTSリストに予算通知用のメールアドレスを含めます。

エラー

FAILURE: Uncaught exception of type 'EXPRESSION_ERROR' on line 16 at position 34 : Following email address(es) are not
allowed by the email integration <INTEGRATION_NAME>: [<email>]

原因

メールアドレスが通知統合に含まれていません。

解決策

通知統合にメールアドレスを追加するか、 ALLOWED_RECIPIENTS リストにすべてのメールアドレスを含む通知統合を使用します。

エラー

Email recipients in the given list at indexes [<index_list>] are not allowed. Either these email addresses are not yet validated
or do not belong to any user in the current account.

原因

追加しようとしたメールアドレスの一部または全部が検証されていません。

解決策

メール通知受信者のメールアドレスを認証します。 をご参照ください。

GET_SERVICE_TYPE_USAGEメソッドを正常に呼び出せません

以下のシナリオは、 <budget_name>!GET_SERVICE_TYPE_USAGE メソッドを呼び出す際の一般的な問題のトラブルシューティングに役立ちます。

エラー

001044 (42P13): SQL compilation error: error line 0 at position -1 Invalid argument types for function 'GET_SERVICE_TYPE_USAGE':
(VARCHAR(X), VARCHAR(X), VARCHAR(X), VARCHAR(X))

原因

無効な引数または間違った数の引数でメソッドが呼び出されました。

解決策

メソッドを呼び出す際に使用する引数が有効かどうか、必要な引数がすべて含まれているかどうかを確認します。

エラー

002151 (22023): Uncaught exception of type 'STATEMENT_ERROR' on line 16 at position 23 : SQL compilation error:
[:TIME_DEPART] is not a valid date/time component for function DATE_TRUNC.

原因

引数 TIME_DEPART が無効な文字列です。

解決策

参照トピックにある TIME_DEPART 引数 の有効な値のいずれかを使用します。

エラー

100094 (22000): Uncaught exception of type 'STATEMENT_ERROR' on line 16 at position 23 : Unknown timezone: '<invalid_timezone>'

原因

引数 USER_TIMEZONE が無効な文字列です。

解決策

有効なタイムゾーン文字列を使用します。詳細については、 GET_SERVICE_TYPE_USAGE の使用上の注意 をご参照ください。

アカウントでBudgets機能を使用できない

エラー

FAILURE: SQL compilation error: Class 'SNOWFLAKE.CORE.BUDGET' does not exist or not authorized.
000002 (0A000): Uncaught exception of type 'STATEMENT_ERROR' on line 0 at position -1 : Unsupported feature 'TOK_RESOURCE_GROUP'.

原因

アカウントはまだBudgets機能をサポートしていません。

解決策

予算機能は、Govリージョンのアカウントでは使用できません。将来のリリースでGovリージョンをサポートする予定です。