System.Timestamp () (流分析)

Azure 流分析中查询的每个阶段的每个事件都有与之关联的时间戳。 System.Timestamp () 是可用于检索事件的时间戳的系统属性。

下面介绍 Azure 流分析如何为事件分配时间戳。

输入事件时间戳

输入事件的时间戳可以通过列值 (或 TIMESTAMP BY 子句中指定的表达式) 定义:

SELECT System.Timestamp() t   
FROM input   
TIMESTAMP BY MyTimeField  
  

如果未为给定输入指定 TIMESTAMP BY 子句,则将事件的到达时间用作时间戳。 例如,对于事件中心输入,将使用事件的排队时间。

生成的事件时间戳

执行计算时,生成的事件的时间戳是可以确定此结果的最早逻辑时间。

让我们看看 Azure 流分析中的基本查询操作如何 (筛选器、投影、聚合和联接) 生成结果的时间戳。

投影

SELECT  
      Prop1,  
      Prop2,  
      Prop3 - Prop4 / 12,
      System.Timestamp() t  
FROM input  
  

投影不会更改事件的时间戳,结果的时间戳与输入的时间戳相同。

Filter

SELECT *  
FROM input  
WHERE prop1 > prop2  
  

筛选器不会更改事件的时间戳。 结果的时间戳与输入的时间戳相同。

时间段的 GROUP BY

SELECT  
      userId,  
      AVG(prop1),  
      SUM(prop2),  
      System.Timestamp() t  
FROM input  
GROUP BY TumblingWindow(minute, 1), userId  
  

聚合结果的时间戳是此结果所对应的时间窗口的结束时间。 请参阅 开窗 (Azure 流分析) 介绍 Azure 流分析中不同窗口类型的文章。

INNER JOIN

SELECT  
      System.Timestamp()  
FROM input1  
JOIN input2  
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10  
  

内部联接生成与 input1 和 input2 中的匹配事件对相对应的结果。

表示 input1 中的事件 e1 和 input2 中的 e2 匹配的事件按 e1 和 e2 的最新时间戳进行时间戳。

LEFT OUTER JOIN

SELECT  
      System.Timestamp()  
FROM input1  
LEFT JOIN input2  
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10  
  

左外部联接生成两种类型的结果。 有些对应于 input1 和 input2 中的匹配事件对;其他项仅对应于 input1 的事件,并指示未找到来自 input2 的匹配事件。

表示匹配 (的事件同时具有 input1 和 input2,) 由匹配输入 (的最新时间戳标记,如上面的 INNER JOIN) 的情况一样。

表示 input2 (不匹配的事件为 NULL,) 按可能发生匹配 input2 事件的最新逻辑时间进行时间戳。 例如,在上面的示例中,它是 input1 的时间戳 + 10 分钟。