Solução de problemas de orçamento¶
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;
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 Colunas da tabela de eventos.
Event table column |
Field |
Value |
Description |
|---|---|---|---|
|
|
|
Unique ID of the budget instance. |
|
|
Fully qualified name of the budget instance. |
|
|
|
|
Constant identifier for all budget telemetry events. |
|
n/a |
|
Indicates a budget log event. |
|
|
|
Descriptive event name. Possible values include the following:
|
|
|
Severity level of budget event. |
|
|
|
|
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';
- 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';
Troubleshooting specific problems¶
Os cenários a seguir podem ajudar você a solucionar problemas que podem ocorrer ao criar ou editar orçamentos:
Você não pode adicionar ou remover objetos de um orçamento personalizado
Você não pode definir notificações por e-mail para um orçamento
Você não pode chamar com sucesso o método GET_SERVICE_TYPE_USAGE
Você não pode ativar o orçamento da conta¶
Existem vários motivos pelos quais você pode não conseguir ativar o orçamento da sua conta:
Erro |
Unknown user-defined function SNOWFLAKE.LOCAL.ACTIVATE
|
|---|---|
Causa |
Se sua conta Snowflake for nova, o orçamento da conta ainda não estará disponível em sua conta. |
Solução |
Aguarde até que o orçamento da conta esteja disponível na sua conta recém-criada. Você pode ativá-lo depois que estiver disponível. |
Erro |
FAILURE: Uncaught exception of type 'BUDGET_ALREADY_ACTIVATED' on line X at position X
|
|---|---|
Causa |
O orçamento da conta já foi ativado. |
Solução |
Você pode chamar o método <budget_name>!GET_CONFIG para visualizar o carimbo de data/hora de ativação: CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_CONFIG();
|
Erro |
-20000 (P0001): Uncaught exception of type 'NO_PERMISSION_TO_ACTIVATE_BUDGET' on line X at position X
|
|---|---|
Causa |
Sua conta ainda não oferece suporte ao recurso Budgets. |
Solução |
O recurso Budgets não está disponível para contas em regiões governamentais. O suporte para regiões governamentais estará disponível em uma versão futura. |
Você não pode criar um orçamento personalizado¶
Existem vários motivos pelos quais você pode não conseguir criar um orçamento personalizado.
Erro |
FAILURE: SQL access control error: Insufficient privileges to operate on class 'BUDGET'
|
|---|---|
Causa |
A função que você está usando não tem os privilégios necessários para criar orçamentos personalizados. |
Solução |
Use uma função com os privilégios necessários. Consulte Crie uma função personalizada para criar orçamentos. |
Erro |
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
|
|---|---|
Causa |
Você passa argumentos para o método do construtor para criar um orçamento. |
Solução |
Consulte CREATE BUDGET e edite sua instrução create. |
Você não pode ativar um orçamento personalizado¶
Erro |
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
|
|---|---|
Causa |
Você tentou chamar o método ACTIVATE em um orçamento personalizado. |
Solução |
O método ACTIVATE está disponível apenas no orçamento da conta. Depois de criar um orçamento personalizado, use os métodos <budget_name>!SET_SPENDING_LIMIT e <budget_name>!SET_EMAIL_NOTIFICATIONS para configurar o orçamento e começar a receber e-mails de notificação. |
Você não pode chamar métodos no orçamento da conta¶
Há vários motivos pelos quais a chamada de um método no orçamento da conta pode falhar.
Erro |
-20000 (P0001): Uncaught exception of type 'FUNCTION_NOT_SUPPORTED_FOR_ACCOUNT_ROOT_BUDGET' on line 11 at position 18
|
|---|---|
Causa |
Você tentou chamar qualquer um dos seguintes métodos no orçamento da conta: |
Solução |
Esses métodos não estão disponíveis no orçamento da conta. O orçamento da conta monitora todos os objetos suportados na conta e os objetos não podem ser adicionados ou removidos. Para obter mais informações, consulte Orçamento de conta e orçamentos personalizados. |
Erro |
-20000 (P0001): Uncaught exception of type 'ACCOUNT_ROOT_BUDGET_NOT_ACTIVATED' on line X at position X
|
|---|---|
Causa |
Você tentou chamar um método no orçamento da conta antes que o orçamento da conta fosse ativado. |
Solução |
Você não pode adicionar ou remover objetos de um orçamento personalizado¶
Para adicionar ou remover com sucesso um objeto de um orçamento personalizado, a função usada para chamar o método deve ter os privilégios e funções necessários.
Erro |
002141 (42601): SQL compilation error:
Unknown user-defined function <budget_db>.<budget_schema>.<budget_name>!ADD_RESOURCE
|
|---|---|
Causa |
A função que você usou para chamar o método de instância não tem os privilégios necessários para adicionar (ou remover) objetos do orçamento. |
Solução |
Conceda a função de instância e os privilégios necessários à função usada para chamar o método. Para obter mais informações, consulte Criação de uma função personalizada para monitorar um orçamento personalizado. |
Erro |
002003 (02000): SQL compilation error:
<object_type> '<object_name>' does not exist or not authorized.
|
|---|---|
Causa |
Você tentou adicionar um objeto a um orçamento personalizado, mas a função usada para chamar o método não tem os privilégios necessários. |
Solução |
Para adicionar (ou remover) um objeto de um orçamento, a função usada para chamar o método deve ter o privilégio APPLYBUDGET sobre o objeto. Se o objeto pai for um banco de dados ou esquema, você também deverá ter o privilégio USAGE no banco de dados e esquema que contém o objeto. Para mais informações, consulte a lista de privilégios de objeto necessários. |
Erro |
Uncaught exception of type 'EXPRESSION_ERROR' on line 10 at position 21 :
Privilege 'APPLYBUDGET' is not authorized on the reference object.
|
|---|---|
Causa |
Você tentou criar uma referência para um objeto sem especificar o parâmetro PRIVILEGE na instrução SYSTEM$REFERENCE. |
Solução |
Crie a referência com o privilégio APPLYBUDGET no objeto. |
Erro |
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.
|
|---|---|
Causa |
Existem várias causas para esta mensagem de erro:
|
Solução |
|
Você não pode definir notificações por e-mail para um orçamento¶
Os cenários a seguir podem ajudar você a solucionar problemas comuns ao chamar o método <budget_name>!SET_EMAIL_NOTIFICATIONS.
Erro |
Unknown user-defined function <database_name>.<schema_name>.<budget_name>.SET_EMAIL_NOTIFICATIONS
|
|---|---|
Causa |
A função que você usou para definir as notificações por e-mail para um orçamento personalizado não tem a função de instância ADMIN. |
Solução |
Use uma função com os privilégios e funções necessários. Consulte Requisitos de controle de acesso para SET_EMAIL_NOTIFICATIONS. |
Erro |
Integration '<INTEG_NAME>' does not exist or not authorized.
|
|---|---|
Causa |
A integração de notificação não existe. |
Solução |
Use uma integração de notificação válida. Para obter mais informações, consulte Criar uma integração de notificação por e-mail. Inclua os endereços de e-mail para notificações de orçamento na lista ALLOWED_RECIPIENTS. |
Erro |
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>]
|
|---|---|
Causa |
Os endereços de e-mail não estão incluídos na integração de notificação. |
Solução |
Adicione os endereços de e-mail à integração de notificação ou use uma integração de notificação que inclua todos os endereços de e-mail na lista ALLOWED_RECIPIENTS. |
Erro |
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.
|
|---|---|
Causa |
Alguns ou todos os endereços de e-mail que você tentou adicionar não foram validados. |
Solução |
Consulte Verificar os endereços de e-mail dos destinatários da notificação por e-mail. |
Você não pode chamar com sucesso o método GET_SERVICE_TYPE_USAGE¶
Os cenários a seguir podem ajudar você a solucionar problemas comuns ao chamar o método <budget_name>!GET_SERVICE_TYPE_USAGE.
Erro |
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))
|
|---|---|
Causa |
Você chamou o método com argumentos inválidos ou com o número errado de argumentos. |
Solução |
Verifique se os argumentos usados para chamar o método são válidos e se você incluiu todos os argumentos necessários. |
Erro |
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.
|
|---|---|
Causa |
O argumento TIME_DEPART é uma cadeia de caracteres inválida. |
Solução |
Use um dos valores válidos listados para o argumento TIME_DEPART no tópico de referência. |
Erro |
100094 (22000): Uncaught exception of type 'STATEMENT_ERROR' on line 16 at position 23 : Unknown timezone: '<invalid_timezone>'
|
|---|---|
Causa |
O argumento USER_TIMEZONE é uma cadeia de caracteres inválida. |
Solução |
Use uma cadeia de caracteres de fuso horário válida. Para obter mais informações, consulte as notas de uso para GET_SERVICE_TYPE_USAGE. |
O recurso do Budgets não está disponível para sua conta¶
Erros |
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'.
|
|---|---|
Causa |
Sua conta ainda não oferece suporte ao recurso Budgets. |
Solução |
O recurso Budgets não está disponível para contas em regiões governamentais. O suporte para regiões governamentais estará disponível em uma versão futura. |