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 流分析:聚合时删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:检查流期间的重复项

删除排序数组中的重复项

LeetCode 26.删除有序数组中的重复项

算法leetcode|26. 删除有序数组中的重复项(rust重拳出击)

算法leetcode|26. 删除有序数组中的重复项(rust重拳出击)

算法leetcode|26. 删除有序数组中的重复项(rust重拳出击)