为何无法从serverless_task_history视图查看Snowflake任务Credits消耗?
Snowflake任务Credits消耗查询无结果排查
问题背景
我在Snowflake中调度了每小时运行的任务,该任务执行从基于原始表的Stream到规整表的Merge语句。我需要查询这些任务执行所消耗的Snowflake Credits,按照指引运行了查询1,但即使移除日期条件也无记录返回。运行查询2(基于task_history视图)可正常查看任务执行记录,需要排查无法通过查询1查看Credits消耗的原因,是否为权限缺失或查询语法问题?
查询1(无返回结果)
SELECT start_time::date as day ,TASK_NAME ,sum(CREDITS_USED) as credits_used FROM table(information_schema.serverless_task_history( date_range_start=>'2023-04-01 00:00:00.000', date_range_end=>'2023-04-28 00:00:00.000') ) GROUP BY 1,2 ORDER BY 3 DESC;
查询2(正常返回任务记录)
select * from table(information_schema.task_history()) order by scheduled_time;
排查原因
1. 任务类型不匹配
serverless_task_history仅返回**无服务器任务(Serverless Tasks)的执行记录和Credits消耗。如果你的任务是使用用户仓库(User-Managed Warehouses)**运行的,这个视图不会有数据——因为Credits消耗会算在仓库的使用里,而非任务本身。
可以通过task_history视图中的WAREHOUSE_NAME字段判断:如果该字段不为空,说明任务是用用户仓库执行的,此时需要查询warehouse_metering_history统计Credits消耗,示例:
SELECT start_time::date as day, warehouse_name, sum(credits_used) as credits_used FROM table(information_schema.warehouse_metering_history( date_range_start=>'2023-04-01 00:00:00.000', date_range_end=>'2023-04-28 00:00:00.000') ) WHERE warehouse_name = '<你的任务使用的仓库名>' GROUP BY 1,2 ORDER BY 3 DESC;
2. 权限不足
虽然能访问task_history,但serverless_task_history需要额外权限:
- 拥有
MONITOR EXECUTION权限在任务所在的数据库或模式上; - 或拥有
ACCOUNTADMIN角色,或被授予MONITOR USAGE账户级权限。
检查当前角色权限:
SHOW GRANTS ON SCHEMA <你的任务所在模式>;
若缺少权限,需由管理员执行授权:
GRANT MONITOR EXECUTION ON SCHEMA <模式名> TO ROLE <你的角色名>;
3. 时间范围与过滤规则问题
- 查询1的
date_range_end设为2023-04-28 00:00:00.000,会排除4月28日当天的任务记录,可调整为2023-04-29 00:00:00.000覆盖全天。 serverless_task_history默认仅返回成功执行的任务,若任务有失败情况,需添加result_filter参数包含失败记录:
SELECT start_time::date as day ,TASK_NAME ,sum(CREDITS_USED) as credits_used FROM table(information_schema.serverless_task_history( date_range_start=>'2023-04-01 00:00:00.000', date_range_end=>'2023-04-28 00:00:00.000', result_filter=>'state IN (''SUCCEEDED'', ''FAILED'')') ) GROUP BY 1,2 ORDER BY 3 DESC;
内容的提问来源于stack exchange,提问作者Harvesting Data
相关产品推荐
相关产品推荐

