Azure 流分析:聚合时删除重复项
Posted
技术标签:
【中文标题】Azure 流分析:聚合时删除重复项【英文标题】:Azure Stream Analytics : remove duplicates while aggregating 【发布时间】:2018-12-15 07:43:06 【问题描述】:我正在开发一个温度和压力传感器系统,其中我的数据通过流分析作业流动。现在,由于未收到确认和其他各种原因,可能会发送重复的消息。所以我的数据可能是以下格式:-
DeviceID TimeStamp MeasurementName Value
1 1 temperature 50
1 1 temperature 50
1 2 temperature 60
请注意,第 2 条记录与第 1 条记录重复,因为 DeviceId 和 Timestamp 和 MeasurementName 相同。 我希望在流分析作业中为这些数据平均花费超过 5 分钟的滚动窗口。所以我有这个查询
SELECT
AVG(Value)
FROM
SensorData
GROUP BY
DeviceId,
MeasurementName,
TumblingWindow(minute, 5)
预计此查询将在 5 分钟内为我提供每个设备的温度和压力值的平均测量值。 在做这个平均值时,我需要消除重复。实际平均值为 (50+60)/2 = 55。 但是给我这个查询的平均值是 (50+50+60)/3 = 53.33
如何调整此查询以获得正确的输出?
提前致谢。
【问题讨论】:
【参考方案1】:根据 ASA 中的 Query Language Elements,似乎 ASA 不直接支持 distinct。但是,您会发现它可以与来自here 的COUNT
一起使用。
所以,也许你可以参考我下面的 sql 来获得没有重复数据的平均价值。
with temp as
(
select count(distinct DeviceID) AS device,
count(distinct TimeStamp) AS time,
count(distinct MeasurementName) AS name,
Value as v
from jsoninput
group by Value,TumblingWindow(minute, 5)
)
select avg(v) from temp
group by TumblingWindow(minute, 5)
输出样本数据:
【讨论】:
非常感谢您的回答。很有帮助。 @user3740951 很高兴为您提供帮助。以上是关于Azure 流分析:聚合时删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|26. 删除有序数组中的重复项(rust重拳出击)