✅ Azure 流分析
Azure 流分析中查询的每个阶段的每个事件都有一个与之关联的时间戳。 System.Timestamp() 是一个系统属性,可用于检索事件的时间戳。
下面介绍 Azure 流分析如何将时间戳分配给事件。
输入事件时间戳
输入事件的时间戳可由 TIMESTAMP BY 子句中指定的列值(或表达式)定义:
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
如果未为给定输入指定 TIMESTAMP BY 子句,则事件的到达时间将用作时间戳。 例如,在事件中心输入的情况下,将使用事件排队时间。
生成的事件时间戳
执行计算时,生成的事件的时间戳是最早可以确定此结果的逻辑时间。
让我们看看 Azure 流分析(筛选器、投影、聚合和联接)中的基本查询作如何生成结果的时间戳。
Projection
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 流分析中不同窗口类型的 窗口 化文章。
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 分钟。