5 个回答
增量聚合窗口
结合时间或计数窗口,逐步聚合结果,减少全量计算。
触发条件:窗口结束时触发最终聚合,中间结果可增量输出。
时间语义:仅支持事件时间。
适用场景:实时去重统计(如UV计算)。
优点:减少状态存储,提升性能。
缺点:仅支持部分聚合函数(如COUNT(DISTINCT))。
示例-- 增量聚合窗口(每日UV统计)
SELECT
DATE_TRUNC('day', event_time) AS day,
COUNT(DISTINCT user_id) AS uv
FROM clicks
GROUP BY DATE_TRUNC('day', event_time);
发布于:1周前 (05-28) IP属地:
全局窗口
整个流数据属于一个窗口,需自定义触发条件(如定时触发或计数触发)。
触发条件:需结合Trigger定义(如每1000条数据触发一次)。
时间语义:需配合事件时间或处理时间。
适用场景:复杂聚合(如全局累计去重计数)。
优点:灵活性强,支持自定义触发逻辑。
缺点:需手动管理窗口状态,易导致状态膨胀。
示例:-- 全局窗口(每1000条数据触发一次聚合)
SELECT
COUNT(DISTINCT user_id) AS unique_users
FROM clicks
GROUP BY GLOBAL_WINDOW()
TRIGGER COUNT(1000);
发布于:1周前 (05-28) IP属地:
会话窗口:
窗口边界由事件活动间隙(Inactivity Gap)决定。
触发条件:在指定间隙时间内无新事件则关闭窗口。
时间语义:仅支持事件时间。
适用场景:用户会话分析(如分析用户连续活跃时段)。
优点:自然反映用户行为周期。
缺点:需合理设置活动间隙参数,否则可能合并过多事件。
示例:-- 会话窗口(活动间隙为30分钟)
SELECT
SESSION_START(event_time, INTERVAL '30' MINUTE) AS session_start,
AVG(duration) AS avg_duration
FROM user_events
GROUP BY SESSION(event_time, INTERVAL '30' MINUTE);
发布于:1周前 (05-28) IP属地:
滑动窗口
窗口大小固定,但窗口之间有重叠。
触发条件:窗口结束时触发计算。
时间语义:仅支持事件时间。
适用场景:连续监控(如实时检测过去1小时内的异常行为)。
优点:平滑数据,捕捉短期趋势。
缺点:窗口重叠导致计算量增加。
示例:-- 滑动窗口(每10分钟统计过去30分钟的数据)
SELECT
HOP_START(event_time, INTERVAL '10' MINUTE, INTERVAL '30' MINUTE) AS window_start,
COUNT(*) AS event_count
FROM logs
GROUP BY HOP(event_time, INTERVAL '10' MINUTE, INTERVAL '30' MINUTE);
发布于:1周前 (05-28) IP属地:
滚动窗口:
窗口大小固定,且窗口之间不重叠。
触发条件:窗口结束时触发计算。
时间语义:支持事件时间(Event Time)或处理时间(Processing Time)。
适用场景:周期性统计(如每分钟订单量)。
优点:计算简单,适合实时看板。
缺点:窗口边界固定,可能丢失窗口边缘的短期波动数据。
示例:-- 按事件时间滚动窗口(每5分钟统计)
SELECT
TUMBLE_START(event_time, INTERVAL '5' MINUTE) AS window_start,
SUM(amount) AS total_amount
FROM orders
GROUP BY TUMBLE(event_time, INTERVAL '5' MINUTE);
发布于:1周前 (05-28) IP属地:
我来回答
您需要 登录 后回答此问题!