Azure 流分析窗口聚合

问题描述 投票:0回答:1

如何使用窗口函数解决azure流分析中的问题

col1 col2 状态 旗帜
Q1 P1 开始了 1
Q1 P1 已连接 1
Q1 P1 结束了 0
Q1 P1 已完成 0
Q1 P2 开始了 1
Q1 P2 已连接 1
Q1 P2 结束了 0
Q1 P2 已完成 0
Q2 P3 开始了 1
Q2 P3 已连接 1

O/p:

我们需要聚合第1列和第2列。如果第3列包含诸如ended或completed之类的值,我们应该将第2列中的相应值视为0。如果第3列包含诸如started或connected之类的值,我们应该考虑相应的值第 2 列中的值为 1。最后,我们需要对所有行的第 2 列中的值进行求和。

col1
Q1 0
Q2 1

我能够使用滑动窗口计算 col2 级别的最小值。然而,当我尝试使用滑动窗口在 col2 级别执行聚合时,它执行的是累积和。

with min_val as (
select col1, 
col2,
min(flag) as val 
from cte 
group by col1,col2, slidingwindow(day,1))

select col1
,sum(val)
from min_val
group by col1, slidingwindow(day,1) -- This sliding window is doing cummulative sum
azure-stream-analytics stream-analytics
1个回答
0
投票

您可以使用

TumblingWindow(minute, 1)
作为聚合函数来按所需列进行分组。这会将所有的 col1, col2 行分组,然后您可以知道当前组是否已完成或仍在连接中。

select col1, 
col2,
GetArrayElement(collect(flag),GetArraylength(collect(flag))-1) as count
from <your_input> 
group by col1,col2, TumblingWindow(minute, 1);

collect()
将以相同的顺序收集组中的所有
flag
行。因此,如果您获取
collect(flag)
数组中的最后一个值,那么它将给出当前组的状态,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.