You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中查询特定时间范围内正在运行的查询?

解决方案

方法1:分片调用QUERY_HISTORY函数,按时间窗口拆分规避1万行限制

QUERY_HISTORY函数支持指定时间范围参数,你可以把过去1小时拆成多个小的时间窗口(比如每10分钟一个窗口),分别调用函数查询再合并结果,就能避开单次调用1万行的上限。如果团队查询量极高,还可以把时间窗口拆得更小,只要单个窗口内的查询量不超过1万就不会漏数据。
示例代码:

-- 按10分钟分片查询过去1小时所有运行中任务,合并结果
SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
  DATEADD('minute', -60, CURRENT_TIMESTAMP()),
  DATEADD('minute', -50, CURRENT_TIMESTAMP())
)) WHERE EXECUTION_STATUS = 'RUNNING'
UNION ALL
SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
  DATEADD('minute', -50, CURRENT_TIMESTAMP()),
  DATEADD('minute', -40, CURRENT_TIMESTAMP())
)) WHERE EXECUTION_STATUS = 'RUNNING'
UNION ALL
-- 以此类推补全剩下4个10分钟窗口即可
SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
  DATEADD('minute', -10, CURRENT_TIMESTAMP()),
  CURRENT_TIMESTAMP()
)) WHERE EXECUTION_STATUS = 'RUNNING';

方法2:使用QUERY_HISTORY_BY_*系列函数缩小查询范围

如果不需要查询全账号的所有任务,可以按用户、仓库、会话维度过滤,使用对应的QUERY_HISTORY_BY_USER、QUERY_HISTORY_BY_WAREHOUSE、QUERY_HISTORY_BY_SESSION函数,这些函数同样支持时间范围参数,单个维度下的查询量通常远低于全账号总量,也能避免触达1万行上限。
示例按仓库查询代码:

SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_WAREHOUSE(
  WAREHOUSE_NAME => '你的业务仓库名',
  END_TIME_RANGE_START => DATEADD('hour', -1, CURRENT_TIMESTAMP()),
  END_TIME_RANGE_END => CURRENT_TIMESTAMP()
)) WHERE EXECUTION_STATUS = 'RUNNING';

方法3:开启Account Usage QUERY_HISTORY视图低延迟同步

如果你的Snowflake版本支持,可以开启ACCOUNT_USAGE.QUERY_HISTORY视图的低延迟同步能力,开启后运行中的任务会在秒级同步到该视图中,该视图没有1万行的返回限制,直接写过滤条件即可查询符合要求的任务:

SELECT *
FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY"
WHERE START_TIME >= DATEADD('hour', -1, CURRENT_TIMESTAMP())
AND EXECUTION_STATUS = 'RUNNING'
AND TOTAL_ELAPSED_TIME > 3600000; -- 过滤运行时长超过1小时的任务,单位为毫秒

注意该功能开启后可能产生额外的云服务成本,可根据团队需求选择。

内容的提问来源于stack exchange,提问作者SungJoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:27:00