Résolution des problèmes liés aux budgets

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 Colonnes de table d’événements.

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

Les scénarios suivants peuvent vous aider à résoudre les problèmes qui peuvent survenir lors de la création ou de la modification de budgets :

Vous ne pouvez pas activer le budget du compte

Il existe plusieurs raisons pour lesquelles il se peut que vous ne puissiez pas activer le budget de votre compte :

Erreur

Unknown user-defined function SNOWFLAKE.LOCAL.ACTIVATE

Cause

Si votre compte Snowflake est nouveau, le budget du compte n’est pas encore disponible dans votre compte.

Solution

Attendez que le budget du compte soit disponible dans votre compte venant d’être créé. Vous pourrez l’activer une fois qu’il sera disponible.

Erreur

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

Cause

Le budget du compte a déjà été activé.

Solution

Vous pouvez appeler la méthode <nom_budget>!GET_CONFIG pour afficher l’horodatage de l’activation :

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

Erreur

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

Cause

Votre compte ne prend pas encore en charge la fonction Budgets.

Solution

La fonction Budgets n’est pas disponible pour les comptes dans les régions Gov. La prise en charge des régions Gov sera disponible dans une prochaine version.

Vous ne pouvez pas créer de budget personnalisé

Il existe de nombreuses raisons pour lesquelles vous ne pouvez pas créer un budget personnalisé.

Erreur

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

Cause

Le rôle que vous utilisez n’a pas les privilèges requis pour créer des budgets personnalisés.

Solution

Utilisez un rôle avec les privilèges requis. Voir Créer un rôle personnalisé pour créer des budgets.

Erreur

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

Cause

Vous passez des arguments à la méthode du constructeur pour créer un budget.

Solution

Consultez CREATE BUDGET et modifiez votre instruction de création.

Vous ne pouvez pas activer de budget personnalisé

Erreur

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

Cause

Vous avez essayé d’appeler la méthode ACTIVATE sur un budget personnalisé.

Solution

La méthode ACTIVATE n’est disponible que sur le budget du compte. Une fois que vous avez créé un budget personnalisé, utilisez les méthodes <nom_budget>!SET_SPENDING_LIMIT et <nom_budget>!SET_EMAIL_NOTIFICATIONS pour configurer le budget et commencer à recevoir des e-mails de notification.

Vous ne pouvez pas appeler de méthodes sur le budget du compte

Il y a plusieurs raisons pour lesquelles l’appel d’une méthode sur le budget du compte peut échouer.

Erreur

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

Cause

Vous avez essayé d’appeler l’une des méthodes suivantes sur le budget du compte :

Solution

Ces méthodes ne sont pas disponibles sur le budget du compte. Le budget du compte contrôle tous les objets pris en charge dans le compte et les objets ne peuvent pas être ajoutés ou supprimés. Pour plus d’informations, consultez Budget du compte et budgets personnalisés.

Erreur

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

Cause

Vous avez essayé d’appeler une méthode sur le budget du compte avant que le budget du compte ne soit activé.

Solution

Activez le budget du compte.

Vous ne pouvez pas ajouter ou supprimer des objets d’un budget personnalisé

Pour réussir à ajouter ou à supprimer un objet d’un budget personnalisé, le rôle utilisé pour appeler la méthode doit avoir les privilèges requis et le rôle.

Erreur

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

Cause

Le rôle que vous avez utilisé pour appeler la méthode d’instance ne dispose pas des privilèges requis pour ajouter (ou supprimer) des objets au budget.

Solution

Accordez le rôle d’instance et les privilèges requis au rôle utilisé pour appeler la méthode. Pour plus d’informations, voir Créer un rôle personnalisé pour surveiller un budget personnalisé.

Erreur

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

Cause

Vous avez essayé d’ajouter un objet à un budget personnalisé, mais le rôle que vous avez utilisé pour appeler la méthode ne dispose pas des privilèges requis.

Solution

Pour ajouter (ou supprimer) un objet d’un budget, le rôle utilisé pour appeler la méthode doit avoir le privilège APPLYBUDGET sur l’objet. Si l’objet parent est une base de données ou un schéma, vous devez également disposer du privilège USAGE sur la base de données et le schéma qui contiennent l’objet.

Pour plus d’informations, consultez la liste des privilèges requis pour les objets.

Erreur

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

Cause

Si vous créez une référence pour un objet sans spécifier le paramètre PRIVILEGE dans l’instruction SYSTEM$REFERENCE.

Solution

Créez la référence avec le privilège APPLYBUDGET sur l’objet.

Erreur

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.

Cause

Les causes de ce message d’erreur sont multiples :

  • Si vous essayez d’ajouter la base de données SNOWFLAKE à un budget personnalisé avec une instruction en ligne SYSTEM$REFERENCE.

  • Vous ne disposez pas des privilèges requis sur l’objet pour en créer une référence. La référence valide est nécessaire pour ajouter l’objet à un budget.

Solution

Vous ne pouvez pas définir de notifications par e-mail pour un budget

Les scénarios suivants peuvent vous aider à résoudre des problèmes courants lorsque vous appelez la méthode <nom_budget>!SET_EMAIL_NOTIFICATIONS.

Erreur

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

Cause

Le rôle que vous avez utilisé pour définir les notifications par e-mail pour un budget personnalisé n’a pas le rôle d’instance ADMIN.

Solution

Utilisez un rôle doté des privilèges et des rôles requis. Voir Exigences en matière de contrôle d’accès pour SET_EMAIL_NOTIFICATIONS.

Erreur

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

Cause

L’intégration des notifications n’existe pas.

Solution

Utilisez une intégration de notification valide. Pour plus d’informations, voir Créer une intégration des notifications par e-mail. Incluez les adresses e-mail pour les annonces de budgets dans la liste ALLOWED_RECIPIENTS.

Erreur

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>]

Cause

Les adresses e-mail ne sont pas incluses dans l’intégration de la notification.

Solution

Ajoutez les adresses e-mail à l’intégration de notification ou utilisez une intégration de notification qui inclut toutes les adresses e-mail de la liste ALLOWED_RECIPIENTS.

Erreur

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.

Cause

Certaines ou toutes les adresses e-mail que vous avez tenté d’ajouter ne sont pas validées.

Solution

Voir Vérifier les adresses e-mail des destinataires de la notification par e-mail.

Vous ne pouvez pas appeler avec succès la méthode GET_SERVICE_TYPE_USAGE

Les scénarios suivants peuvent vous aider à résoudre des problèmes courants lorsque vous appelez la méthode <nom_budget>!GET_SERVICE_TYPE_USAGE.

Erreur

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))

Cause

Vous avez appelé la méthode avec des arguments non valides ou un nombre d’arguments incorrect.

Solution

Vérifiez que les arguments que vous utilisez pour appeler la méthode sont valides et que vous avez inclus tous les arguments requis.

Erreur

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.

Cause

L’argument TIME_DEPART est une chaîne non valide.

Solution

Utilisez l’une des valeurs valides énumérées pour l’argument TIME_DEPART dans la rubrique de référence.

Erreur

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

Cause

L’argument USER_TIMEZONE est une chaîne non valide.

Solution

Utilisez une chaîne de fuseau horaire valide. Pour plus d’informations, voir les notes sur l’utilisation de GET_SERVICE_TYPE_USAGE.

La fonction Budgets n’est pas disponible pour votre compte

Erreurs

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'.

Cause

Votre compte ne prend pas encore en charge la fonction Budgets.

Solution

La fonction Budgets n’est pas disponible pour les comptes dans les régions Gov. La prise en charge des régions Gov sera disponible dans une prochaine version.