在 Azure 流分析中跳跃 Window

Hopping Window in Azure Stream Analytics

我试图在 azure 流分析中了解 window 的跳跃。 我将从 Azure 事件中心获取以下数据:

[
  {
    "Id": "1",
    "SensorData": [
      {
        "Timestamp": 1603112431,
        "Type": "LineCrossing",
        "Direction": "forward"
      },
      {
        "Timestamp": 1603112431,
        "Type": "LineCrossing",
        "Direction": "forward"
      }
    ],
    "EventProcessedUtcTime": "2020-10-20T06:35:48.5890814Z",
    "PartitionId": 1,
    "EventEnqueuedUtcTime": "2020-10-20T06:35:48.3540000Z"
  },
  {
    "Id": "1",
    "SensorData": [
      {
        "Timestamp": 1603112430,
        "Type": "LineCrossing",
        "Direction": "backward"
      }
    ],
    "EventProcessedUtcTime": "2020-10-20T06:35:48.5890814Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2020-10-20T06:35:48.2140000Z"
  }
]

我的查询如下所示:

SELECT s.Id, COUNT(data.ArrayValue.Direction) as Count
FROM [customers] s TIMESTAMP BY EventEnqueuedUtcTime
CROSS APPLY GetArrayElements(s.SensorData) AS data
WHERE data.ArrayValue.Type = 'LineCrossing' 
AND data.ArrayValue.Direction = 'forward'
GROUP BY s.Id, HoppingWindow(second, 3600, 5)

我使用 Hopping Window 每隔 5 秒获取最后一天的所有事件。 我对给定的 dto 的期望是:Id1 和 Count 2 的一行,但我收到的是:720 行(所以 3600 除以 5)Id1 有 Count 2.

那些事件不应该被 HoppingWindow 函数聚合吗?

我按如下方式构建了您的查询:

with inputValues as (Select input.*, message.ArrayValue as Data from input CROSS APPLY GetArrayElements(input.SensorData) as message)

select inputValues.Id, count(Data.Direction) as Count
into output
from inputValues 
where Data.Type = 'LineCrossing' and Data.Direction='forward'
GROUP BY inputValues.Id, HoppingWindow(second, 3600, 5)

我已经将输入设置为事件中心,并且在 Visual Studio 我已经开始使用云输入进行查询。

我使用 Windows Client application 将消息通过管道传输到事件中心(2. 从下图中)并观察到事件每 5 秒发生一次(1. 从下图和 3. 从下图)。

也许只是更改我共享的查询以反映正确的 time-stamping,但结果应该如预期的那样 - 每 5 秒计入最后一小时内到达的所有事件的定义条件的输出(HoppingWindow 函数中为 3600 秒)。