预算疑难解答¶
本主题介绍如何 监控预算以发现问题,并 针对常见问题提供了解决方案。
使用事件表监控预算¶
您可以使用 事件表 收集与预算相关的遥测数据。在 Snowflake 开始收集事件表中的数据后,您可以查询该表、创建流以跟踪更改,或者设置警报以在某些事件发生时发送通知。
If you don't want to collect telemetry data for budgets, you must set the
ENABLE_BUDGET_EVENT_LOGGING account parameter to FALSE to turn it off.
了解事件¶
下表描述了事件表中与预算事件对应的值,便于您关注相关事件。有关事件表结构的详细信息,请参阅 事件表列。
事件表列 |
字段 |
Value |
描述 |
|---|---|---|---|
|
|
|
预算实例的唯一 ID。 |
|
|
预算实例的完全限定名称。 |
|
|
|
|
所有预算遥测事件的常量标识符。 |
|
不适用 |
|
表示预算日志事件。 |
|
|
|
描述性事件名称。可能的值包括以下内容:
|
|
|
预算事件的严重性级别。 |
|
|
|
|
描述性事件消息,通常包括上下文详细信息,例如集成名称或操作。 |
使用以下示例可以更好地理解如何在事件表中识别预算事件。
- 查询:查找与账户内所有预算的传播相关的所有事件
SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, SCOPE, RECORD_TYPE, RECORD, VALUE FROM SNOWFLAKE.TELEMETRY.EVENTS WHERE RECORD_TYPE = 'EVENT' AND SCOPE['name'] = 'snow.cost.budget';
- 查询:查找与特定预算相关的所有事件(例如,
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¶
以下场景可帮助您排查在创建或编辑预算时可能出现的问题:
您无法激活账户预算¶
有多种原因可能会导致您无法激活账户预算:
错误 |
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();
|
错误 |
-20000 (P0001): Uncaught exception of type 'NO_PERMISSION_TO_ACTIVATE_BUDGET' on line X at position X
|
|---|---|
原因 |
您的账户尚不支持 Budgets 功能。 |
解决方案 |
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_EMAIL_NOTIFICATIONS 和 <budget_name>!SET_SPENDING_LIMIT 方法配置预算并开始接收通知电子邮件。 |
您无法在账户预算中调用方法¶
在账户预算上调用方法可能会失败的原因有很多种。
错误 |
-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.
|
|---|---|
原因 |
此错误消息有多种原因:
|
解决方案 |
|
您无法为预算设置电子邮件通知¶
以下场景可以帮助您排查在调用 <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 功能。 |
解决方案 |
Budgets 功能不适用于 Gov 区域的账户。对 Gov 区域的支持将在将来的版本中提供。 |