Azure 流分析 (快照窗口)

快照窗口将具有相同时间戳的事件分组。 与其他需要特定窗口函数(如 SessionWindow())的窗口类型不同,可以通过将 System.Timestamp() 添加到 GROUP BY 子句来应用快照窗口。

下图说明了包含一系列事件的流,以及如何将它们映射到快照窗口中。

快照窗口关系图

可以在 GROUP BY 子句中将 ( # A1 视为键列或快照窗口定义,因为它根据时间戳的相等性将事件分组到窗口中。 与另一个窗口函数结合使用时,系统. Timestamp ( # A1 被视为键,而不是作为窗口定义。 如果在与其他窗口函数一起使用时,Timestamp ( # A1 不会产生错误,这与在 GROUP BY 子句中使用多个窗口函数时不同。 如果使用的是 ( # A1,则 GROUP BY 中的窗口函数对于批处理结果很有用。

包含 System.web ( # A1 的任何表达式都不被视为窗口。 例如, GROUP BY DATEPART(minute, System.Timestamp()) 失败并出现错误 "必须指定窗口"。

语法

System.Timestamp()

示例

基本示例

下面的示例返回在同一时间内完全相同的主题类型的推文的计数:

SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAM BY CreatedAt
GROUP BY Topic, System.Timestamp()

翻转窗口快照示例

通常情况下,输入事件的发生时间不能完全相同。 在查询的中间步骤中,尤其是在应用不同的窗口函数后,这种情况更常见。

下面的示例在30分钟时间间隔内返回相同用户具有相同主题类型的推文的计数:

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

若要在同一时间间隔内查找每个主题的用户数和推文总数,可以使用前一查询的结果。 由于翻转窗口结果的时间戳将与30分钟边界对齐,因此可以使用快照窗口返回每个边界的事件,因为它们都具有相同的时间戳值。

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

上面的查询返回每个主题在同一30分钟时间间隔内的用户数和推文总计。 若要每2小时获取一次相同的结果,请将一个2小时的翻转窗口添加到 GROUP BY 子句中。

下面的查询将返回每隔 4 30 分钟的时间间隔(每隔2小时时间段结束)的结果。

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

聚合 windows 示例

您可以使用 Timestamp ( # A1 作为聚合 Windows ( # A3 构造中的一个窗口。

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())