流分析查询语言参考

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

流分析查询语言,T-SQL 语法的子集

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

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

收费亭方案

收费站是常见现象 – 我们在世界各地许多高速公路、桥梁和隧道中遇到它们。 每个收费站有多个收费亭,这些收费亭可能是手动的(意味着你需要停下来向办事员支付通行费),也可能是自动的(当你通过收费亭时,收费亭顶部安置的传感器将扫描你的汽车的挡风玻璃贴上的 RFID 卡)。 我们可以轻松地将车辆通过这些收费站的情况想象成能够执行许多有趣操作的事件流。

到达时间与应用程序时间

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

TIMESTAMP BY

在 Azure 流分析中,所有事件都具有定义明确的时间戳。 如果用户想要使用应用时间,他们可以使用 TIMESTAMP BY 关键字在负载中指定应该用于对每个传入事件印记时间戳,以执行窗口化、联接等任何临时计算的列。我们建议最好使用 TIMESTAMP BY 而不是到达时间。 TIMESTAMP BY 可以在日期时间类型的任何列中使用,支持所有的 ISO 8601 格式。 System.Timestamp () 只能在 Select 中使用。

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

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

字段名称区分大小写

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

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

本节内容

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

另请参阅