查询中的Azure Stream Analytics'TimeStamp By'在工作中不起作用,但在测试中效果很好

时间:2019-04-10 14:12:54

标签: sql azure timestamp iot azure-stream-analytics

我正在从事物联网项目。我有一个Raspberry pi,可将数据发送到Azure上的IoTHub。该集线器会将数据转发到Azure流分析作业。在我的查询中,我尝试在1分钟的TumblingWindow中汇总(此处为平均值)所有数据,但作为时间戳,我使用在数据中发送的自定义日期时间。

我尝试了很多事情,但似乎没有任何效果。流作业似乎忽略了我提供的日期时间,只是根据到达时间汇总了所有内容。 仅当通过上传json文件使用“测试”功能时,该功能才有效。

div

我发送的数据类型

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)

我期望的是在Azure流分析上使用“测试”功能时得到的信息:

[
   {
      "Temperature":13.426585352712585,
      "DeviceId":"UlyssesPi",
      "MeasuredOn":"2019-04-09T11:20:30.1027311Z"
   },
   {
      "Temperature":16.81523611620778,
      "DeviceId":"UlyssesPi",
      "MeasuredOn":"2019-04-09T11:20:35.2281002Z"
   },
   ...
]

但是我得到以下信息:

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

那么结果为何不一样?我做错了吗?我该怎么办?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在门户上测试Stream Analytics逻辑时,不会应用事件排序策略。但是,当您在云上运行作业时,将应用事件排序策略。您需要确保有效负载中的时间戳准确(并且事件不会很晚到达)。您还可以配置事件排序策略以定义延迟到达策略(默认为5秒)。您可以学习如何使用这些设置here