流分析查询语言参考

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

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

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

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

收费亭方案

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

到达时间与应用程序时间

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

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  
  

字段名称区分大小写

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

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

在此部分中

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

另请参阅