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

Azure流分析:如何基于每日UTC零点数据聚合最新事件键?

解决方案:针对最新事件键的当日聚合需求

核心思路

滑动窗口与翻滚窗口的组合完全可以满足你的需求。通过以下逻辑实现:

  • 用每日翻滚窗口自动维护每个键从UTC零点到当前时刻的累计聚合值,避免重复计算旧键数据;
  • 用极小滑动窗口捕获每个键的最新事件,作为触发输出的信号,确保仅在有新事件时才输出所有键的当前累计状态。

示例查询实现

WITH DailyTotals AS (
    -- 按键分组,用UTC日翻滚窗口计算每个键的当日累计值
    SELECT
        Key,
        SUM(Value) AS TotalValue,
        System.Timestamp() AS WindowTimestamp
    FROM InputStream
    GROUP BY 
        Key,
        TumblingWindow(day, 1, 0, 'UTC') -- 窗口从UTC零点开始,每日滚动
),
LatestEventTriggers AS (
    -- 用小滑动窗口捕获每个键的最新事件,触发聚合输出
    SELECT
        Key,
        System.Timestamp() AS TriggerTime
    FROM InputStream
    GROUP BY 
        Key,
        SlidingWindow(millisecond, 100) -- 100毫秒窗口确保捕获所有新事件
)
-- 关联获取所有键的最新累计值,仅在有新事件时输出
SELECT
    dt.Key,
    dt.TotalValue,
    lt.TriggerTime AS OutputTime
FROM DailyTotals dt
LEFT JOIN LatestEventTriggers lt ON dt.Key = lt.Key
WHERE lt.TriggerTime IS NOT NULL
GROUP BY dt.Key, dt.TotalValue, lt.TriggerTime

逻辑说明

  1. DailyTotals子查询:通过UTC日翻滚窗口,持续计算每个键从当日零点到当前的累计值,旧键的聚合结果会被窗口自动缓存,无需重复计算。
  2. LatestEventTriggers子查询:用极小的滑动窗口捕获每个键的新事件,只有当有新数据到达时,才会生成触发信号。
  3. 最终关联查询:当有触发信号时,拉取所有键的最新累计值输出,其中旧键的累计值直接使用翻滚窗口中已计算好的结果,仅更新有新事件的键的累计值,完全符合你的需求。

适配你的示例场景

  • 当11点键2的新事件到达时,LatestEventTriggers捕获到该触发信号;
  • 关联DailyTotals后,键2的累计值更新为150(50+50),键1、3的累计值保持100、60;
  • 最终输出所有三个键的当前累计状态,且未重新聚合旧键数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:53:27