Azure 流分析和事件流查询语言参考

Azure 流分析提供了一种 SQL 查询语言,用于对事件流执行转换和计算。

T-SQL 语法的子集

本文档介绍流分析查询语言的语法、用法和最佳做法。 本文档中使用的所有示例都依赖于收费亭方案,如下所示。

流分析查询语言是用于执行流式处理计算的标准 T-SQL 语法的子集。

收费亭方案

收费站是一种常见的现象-我们在世界各地的许多高速公路、桥梁和隧道中遇到它们。 每个收费站都有多个收费亭,这可能是手动的,这意味着你停止向服务员支付通行费,或自动支付- 在展台顶部放置的传感器扫描一张贴在车辆挡风板上的NX卡, 当你通过收费亭。 可以轻松地将车辆通过这些收费站的通道可视化为可以执行有趣作的事件流。

到达时间与应用程序时间

在任何临时系统中(如 Azure 流分析)中,了解时间进度至关重要。 流经系统的每个事件都附带可通过 System.Timestamp()访问的时间戳。 换句话说,系统中的每一个事件都描绘了一个时间点。 此时间戳可以是用户可以在查询中指定的应用程序时间,也可以是系统可以根据到达时间分配的应用程序时间。 根据输入源,到达时间具有不同的含义。 对于 Azure 事件中心的事件,到达时间是事件中心给出的时间戳;对于 Blob 存储,它是 Blob 的上次修改时间。 时间戳是与捕获或分析数据相关的时间点。 如果用户想要使用应用程序时间,则可以使用 TIMESTAMP BY 关键字执行此作。 在上述方案中,车辆进入收费站。 确定传入数据流中的“时间戳”至关重要,应确保捕获的时间也确认事件发生。 例如,如果一个正在监视现金柜台,并且想要计算计费的客户数,则理想情况下,事件时间戳应为“付款成功”,而不是“生成帐单”时间。

TIMESTAMP BY

在 Azure 流分析中,所有事件都具有定义完善的时间戳。 如果用户想要使用应用程序时间,则可以使用 TIMESTAMP BY 关键字来指定有效负载中的列,该列应用于为每个传入事件设置时间戳,以执行任何临时计算,如 Windowing、Joins 等。建议在到达时间使用 TIMESTAMP BY 作为最佳做法。 TIMESTAMP BY 可用于日期/时间类型的任何列,并且支持所有 ISO 8601 格式。 System.Timestamp() 只能在 Select 中使用。

下面是一个 TIMESTAMP BY 示例,该示例使用 EntryTime 列作为事件的应用程序时间:

  
SELECT TollId, EntryTime AS VehicleEntryTime, LicensePlate, State, Make, Model, VehicleType, VehicleWeight, Toll, Tag   
FROM TollTagEntry TIMESTAMP BY EntryTime  
  

字段名称区分大小写

使用兼容性级别 1.0 创建的作业的字段名称在 Azure 流分析引擎处理时更改为小写(大小写不区分大小写)。 对于支持区分大小写的架构(例如 JSON)的输入格式,可以在字段名称不区分大小写的方式进行比较时构造具有重复字段的事件。 此类事件被视为无效事件,并在处理期间被删除。

使用兼容性级别 1.1 或更高版本创建流分析作业时,字段名称将保留区分大小写。 有关详细信息,请参阅 配置兼容性级别 主题。

本部分内容

有关使用流分析查询语言的指导,请参阅以下主题。

另请参阅