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 分钟。