我正在运行Azure流分析上的一些测试作业,运行此查询:
SELECT System.Timestamp AS ts, Collect()
INTO output−queue
FROM input-hub TIMESTAMP BY tapp
GROUP BY HoppingWindow(second , 4 , 2)
,结果是,在某些情况下,窗口端的时间戳是window slide参数的倍数,但有时不是。
例如,对于slide = 2
,您将获得以下窗口关闭时间戳:
2016-08-04T10:36:40.0000000Z
2016-08-04T10:36:42.0000000Z
2016-08-04T10:36:44.0000000Z
2016-08-04T10:36:46.0000000Z
2016-08-04T10:36:48.0000000Z
或者,在slide = 5
的情况下:
2016-08-04T14:55:15.0000000Z
2016-08-04T14:55:20.0000000Z
2016-08-04T14:55:25.0000000Z
2016-08-04T14:55:30.0000000Z
对于不同的滑动值(例如2,3,4,6,…)也是如此。而且,总是为真!无论作业何时开始。
有一些值(如7,11)不遵循此规则。
有人能回答为什么会这样吗?
我想知道Azure SA如何决定何时打开第一个窗口。
非常感谢!
有不同种类的窗口(详见这里)
首先,窗口的开始/结束与作业的开始时间无关。
翻滚和跳跃窗口在逻辑上最好看作是对时间线本身进行分区。例如,应用1分钟滚动窗口将使结果仅在1分钟的mod时间值出现,即2:00pm, 2:01pm等。
注意,不是每1分钟边界都必须有窗口结果,这取决于计算。
滑动窗口可以在时间轴上的任何点产生输出,与滚动和跳跃窗口不同,依赖于输入事件的时间戳。考虑滑动窗口的最佳方式是,窗口可以在任何输入事件结束,并在该事件之前开始滑动一段时间。换句话说,每个事件窗口将包括在它之前或之前滑动时间发生的所有事件。