我正在开展一个物联网项目。我有一个Raspberry pi,它将数据发送到Azure上的IoTHub。该Hub将该数据转发到Azure流分析作业。在我的查询中,我尝试聚合(这里是平均值)TumblingWindow中1分钟的所有数据,但作为时间戳我使用数据中发送的自定义日期时间。
我尝试过很多东西,但似乎没什么用。流作业似乎忽略了我提供的日期时间,并根据到达时间汇总所有内容。只有通过上传json文件使用“测试”功能才有效。
SELECT
DateAdd(minute, -1, system.Timestamp) as TumblingWindowStartTime,
system.TimeStamp as TumblingWindowEndTime,
event.DeviceId as DeviceId,
AVG(event.Temperature) as TemperatureAverage,
Count(*) as MeasurementsCount
INTO
[input]
FROM
[output] as event
TIMESTAMP BY MeasuredOn
GROUP BY
event.DeviceId,
TumblingWindow(minute, 1)
我发送的数据类型
[
{
"Temperature":13.426585352712585,
"DeviceId":"UlyssesPi",
"MeasuredOn":"2019-04-09T11:20:30.1027311Z"
},
{
"Temperature":16.81523611620778,
"DeviceId":"UlyssesPi",
"MeasuredOn":"2019-04-09T11:20:35.2281002Z"
},
...
]
我期待的是在Azure Stream Analytics上使用“测试”功能时得到的结果:
TUMBLINGWINDOWSTARTTIME || TUMBLINGWINDOWENDTIME || DEVICEID || TEMPERATUREAVERAGE || MEASUREMENTSCOUNT
"2019-04-09T11:20:0... "2019-04-09T11:21:0... UlyssesPi 14.674093214798454 6
"2019-04-09T11:21:0... "2019-04-09T11:22:0... UlyssesPi 18.612186615873217 12
"2019-04-09T11:22:0... "2019-04-09T11:23:0... UlyssesPi 12.799415359568199 12
但我得到以下内容:
TUMBLINGWINDOWSTARTTIME || TUMBLINGWINDOWENDTIME || DEVICEID || TEMPERATUREAVERAGE || MEASUREMENTSCOUNT
"2019-04-09 11:22:0... "2019-04-09 11:23:0... UlyssesPi 15,4994594331363 30
那怎么结果不一样呢?这是我做错了吗?我能做什么?
谢谢你的帮助。
在门户上测试Stream Analytics逻辑时,不会应用事件排序策略。但是,当您在云上运行作业时,会应用事件排序策略。您需要确保有效负载中的时间戳是准确的(并且事件不会很晚到达)。您还可以配置事件排序策略以定义延迟到达策略(默认为5秒)。您可以学习如何使用这些设置here。