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

如何统计多集群仓库随时间变化的活跃集群数量

解决方案:利用WAREHOUSE_CLUSTER_HISTORY统计多集群运行数量

要准确生成多集群仓库随时间变化的运行集群数图表,你需要使用SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_CLUSTER_HISTORY视图——它专门记录每个集群的启动、结束时间及归属仓库信息,完美匹配你的需求。你的原代码问题在于误用了WAREHOUSE_EVENTS_HISTORY,该视图仅记录仓库级事件,无法区分单个集群的运行状态。

修正后的SQL代码

-- 生成连续时间序列(示例为12小时内的每分钟间隔,可按需调整)
WITH time_series AS (
    SELECT DATEADD(MINUTE, seq4(), DATEADD(H, -12, CURRENT_TIMESTAMP())) AS interval_time
    FROM TABLE(GENERATOR(ROWCOUNT => 720)) -- 12小时×60分钟=720个时间点
),
-- 提取目标仓库的集群运行时段
cluster_runs AS (
    SELECT
        warehouse_id,
        cluster_number,
        start_time,
        -- 把未结束的集群结束时间设为当前时间,确保正在运行的集群被统计
        COALESCE(end_time, CURRENT_TIMESTAMP()) AS end_time
    FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_CLUSTER_HISTORY
    WHERE warehouse_name = 'COMPUTE_WH'
        AND start_time >= DATEADD(H, -12, CURRENT_TIMESTAMP())
)
-- 计算每个时间点的运行集群数
SELECT
    ts.interval_time AS timestamp,
    COUNT(DISTINCT cr.cluster_number) AS running_clusters
FROM time_series ts
LEFT JOIN cluster_runs cr
    ON ts.interval_time BETWEEN cr.start_time AND cr.end_time
GROUP BY ts.interval_time
ORDER BY ts.interval_time;

代码说明

  • 时间序列生成:通过GENERATOR函数创建指定时间范围内的连续时间点,保证每个时刻的集群状态都能被捕捉到。
  • 集群状态处理:用COALESCE处理未结束的集群(end_time为空),将其结束时间设为当前时间,避免遗漏正在运行的集群。
  • 关联统计:通过时间范围关联,统计每个时间点处于运行状态的集群数量,COUNT(DISTINCT cluster_number)确保每个集群仅被计数一次。

可选调整

  • 若需要更粗的时间粒度(比如15分钟),可将DATEADD(MINUTE, seq4(), ...)改为DATEADD(MINUTE, seq4()*15, ...),同时将ROWCOUNT调整为12*4=48。
  • 如需统计所有仓库,去掉WHERE warehouse_name = 'COMPUTE_WH',并在GROUP BY中加入warehouse_name字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:22:17