如何从Snowflake的information_schema.warehouse_load_history()获取每分钟平均值
如何从Snowflake的warehouse_load_history获取每分钟平均值
问题背景
Snowflake的information_schema.warehouse_load_history()每5秒生成一条仓库负载数据,需要基于这些数据计算每分钟的平均值。
原始查询语句
select * from table(snowflake.information_schema.warehouse_load_history());
原始查询结果(中文表头)
| 开始时间 | 结束时间 | 仓库名称 | 平均运行数 | 平均排队加载数 | 平均排队预配置数 | 平均阻塞数 |
|---|---|---|---|---|---|---|
| 2022-11-10 00:54:00.000 -0800 | 2022-11-10 00:54:05.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:05.000 -0800 | 2022-11-10 00:54:10.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:10.000 -0800 | 2022-11-10 00:54:15.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:15.000 -0800 | 2022-11-10 00:54:20.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:20.000 -0800 | 2022-11-10 00:54:25.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:25.000 -0800 | 2022-11-10 00:54:30.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:30.000 -0800 | 2022-11-10 00:54:35.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:35.000 -0800 | 2022-11-10 00:54:40.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:40.000 -0800 | 2022-11-10 00:54:45.000 -0800 | PROD_WH | 0.03 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:45.000 -0800 | 2022-11-10 00:54:50.000 -0800 | PROD_WH | 0.01 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:50.000 -0800 | 2022-11-10 00:54:55.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:54:55.000 -0800 | 2022-11-10 00:55:00.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:00.000 -0800 | 2022-11-10 00:55:05.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:05.000 -0800 | 2022-11-10 00:55:10.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:10.000 -0800 | 2022-11-10 00:55:15.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:15.000 -0800 | 2022-11-10 00:55:20.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:20.000 -0800 | 2022-11-10 00:55:25.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:25.000 -0800 | 2022-11-10 00:55:30.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
| 2022-11-10 00:55:30.000 -0800 | 2022-11-10 00:55:35.000 -0800 | PROD_WH | 0.00 | 0.00 | 0.00 | 0.00 |
解决方案
可以通过DATE_TRUNC函数将时间维度截断到分钟,再按仓库和分钟分组,对各5秒区间的指标平均值再次取平均,得到每分钟的整体平均值(因每个区间时长一致,算术平均即可准确反映分钟级平均水平)。
示例SQL
SELECT DATE_TRUNC('minute', START_TIME) AS 分钟起始时间, WAREHOUSE_NAME AS 仓库名称, AVG(AVG_RUNNING) AS 分钟平均运行数, AVG(AVG_QUEUED_LOAD) AS 分钟平均排队加载数, AVG(AVG_QUEUED_PROVISIONING) AS 分钟平均排队预配置数, AVG(AVG_BLOCKED) AS 分钟平均阻塞数 FROM table(snowflake.information_schema.warehouse_load_history()) GROUP BY DATE_TRUNC('minute', START_TIME), WAREHOUSE_NAME ORDER BY 分钟起始时间, 仓库名称;
语句说明
DATE_TRUNC('minute', START_TIME):将每条数据的开始时间截断到分钟级别,作为分组的时间维度- 按分钟起始时间和仓库名称分组,保证不同仓库的统计结果相互独立
- 对每个5秒区间的各指标平均值再次取平均,得到该分钟的综合平均值
内容的提问来源于stack exchange,提问作者Programming-Lover
相关产品推荐
相关产品推荐

