查询中的 Azure 流分析 'TimeStamp By' 在工作中不起作用,但在测试中工作正常
Azure Stream Analytics 'TimeStamp By' in query doesn't works on job but works fine on test
我正在从事物联网项目。我有一个 Raspberry pi 可以将数据发送到 Azure 上的 IoTHub。该中心将该数据转发到 Azure 流分析作业。在我的查询中,我尝试在 1 分钟的 TumblingWindow 中聚合(此处为平均值)所有数据,但作为时间戳,我使用在数据中发送的自定义日期时间。
我尝试了很多方法,但似乎没有任何效果。流作业似乎忽略了我提供的日期时间,只是根据到达时间聚合所有内容。
仅当通过上传 json 文件使用 "Test" 功能时才有效。
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 流分析上使用 "Test" 功能时得到的结果:
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
结果怎么不一样呢?是我做错了什么吗?我能做什么?
感谢您的帮助。
在门户上测试您的流分析逻辑时,不会应用事件排序策略。但是,当您的 运行 工作在云端时,事件排序策略会得到应用。您需要确保有效负载中的时间戳是准确的(并且事件不会很晚到达)。您还可以配置事件排序策略来定义迟到策略(默认为 5 秒)。您可以了解如何使用这些设置 here.
我正在从事物联网项目。我有一个 Raspberry pi 可以将数据发送到 Azure 上的 IoTHub。该中心将该数据转发到 Azure 流分析作业。在我的查询中,我尝试在 1 分钟的 TumblingWindow 中聚合(此处为平均值)所有数据,但作为时间戳,我使用在数据中发送的自定义日期时间。
我尝试了很多方法,但似乎没有任何效果。流作业似乎忽略了我提供的日期时间,只是根据到达时间聚合所有内容。 仅当通过上传 json 文件使用 "Test" 功能时才有效。
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 流分析上使用 "Test" 功能时得到的结果:
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
结果怎么不一样呢?是我做错了什么吗?我能做什么?
感谢您的帮助。
在门户上测试您的流分析逻辑时,不会应用事件排序策略。但是,当您的 运行 工作在云端时,事件排序策略会得到应用。您需要确保有效负载中的时间戳是准确的(并且事件不会很晚到达)。您还可以配置事件排序策略来定义迟到策略(默认为 5 秒)。您可以了解如何使用这些设置 here.