你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 流分析作业的兼容性级别

本文介绍 Azure 流分析中的兼容性级别选项。

流分析是托管的服务,会定期进行功能更新和持续性能改进。 该服务的大多数运行时更新会自动提供给最终用户,独立于兼容性级别。 但是,当新功能在现有作业的行为中引入更改,或在运行作业中使用数据的方式中引入更改时,我们将在新的兼容性级别下引入此更改。 可以通过降低兼容性级别设置,使现有流分析作业保持运行状态而不会发生重大更改。 如果已准备使用最新的运行时行为,可以选择提高兼容性级别。

选择兼容性级别

兼容性级别控制流分析作业的运行时行为。

Azure 流分析目前支持三种兼容性级别:

  • 1.2 - 最新行为和最新改进
  • 1.1 - 以前的行为
  • 1.0 - 最初的兼容性级别,几年前正式发布 Azure 流分析期间引入。

创建新的流分析作业时,最佳做法是使用最新的兼容性级别来创建它。 依赖于最新的行为着手作业设计,以免将来添加更改和增大复杂性。

设置兼容性级别

可以使用 Azure 门户或创建作业 REST API 调用来设置流分析作业的兼容性级别。

若要在 Azure 门户中更新作业的兼容性级别:

  1. 使用 Azure 门户定位到你的流分析作业。
  2. 停止该作业,然后更新兼容性级别。 如果作业处于运行状态,则无法更新兼容性级别。
  3. 在“配置”标题下,选择“兼容性级别”。
  4. 选择所需的兼容性级别值。
  5. 选择页面底部的“保存” 。

Azure 门户中的流分析兼容性级别

在更新兼容性级别时,T 编译器会使用与所选兼容性级别相对应的语法来验证作业。

兼容性级别 1.2

在兼容性级别 1.2 中引入了以下重大更改:

AMQP 消息传递协议

1.2 级别:Azure 流分析使用高级消息队列协议 (AMQP) 消息传递协议将内容写入服务总线队列和主题。 通过 AMQP 可使用开放标准协议构建跨平台的混合应用程序。

地理空间函数

以前的级别: Azure 流分析使用地理计算。

1.2 级别: Azure 流分析允许计算几何投影的地理坐标。 地理空间函数的签名没有变化。 但是,其语义略有不同,与以往相比可以提高计算精度。

Azure 流分析支持地理空间参考数据索引编制。 可为包含地理空间元素的参考数据编制索引,以加快联接计算的速度。

更新的地理空间函数提供已知文本 (WKT) 地理空间格式的完整表达能力。 可以指定以前在 GeoJson 中所不支持的其他地理空间组件。

有关详细信息,请参阅 Azure 流分析中的地理空间功能更新 - 云和 IoT Edge

针对使用多个分区的输入源的并行执行查询

以前的级别: Azure 流分析查询要求使用 PARTITION BY 子句在不同的输入源分区之间并行化查询处理。

1.2 级别: 如果查询逻辑可在不同的输入源分区之间并行化,则 Azure 流分析会创建独立的查询实例,并且并行运行计算。

与 Azure Cosmos DB 输出的原生批量 API 集成

以前的级别: 更新插入行为是“插入或合并”。

1.2 级别:与 Azure Cosmos DB 输出的原生批量 API 集成可最大限度地提高吞吐量并有效处理限制请求。 有关详细信息,请参阅从 Azure 流分析输出到 Azure Cosmos DB 页。

更新插入行为是“插入或替换”。

写入到 SQL 输出时的 DateTimeOffset

以前的级别:DateTimeOffset 类型已调整为 UTC。

1.2 级别: 不再调整 DateTimeOffset。

写入到 SQL 输出时的 Long

以前的级别: 根据目标类型截断值。

1.2 级别: 不符合目标类型的值将根据输出错误策略进行处理。

写入到 SQL 输出时的记录和数组序列化

以前的级别: 记录以“记录”的形式编写,数组以“数组”的形式编写。

1.2 级别: 记录和数组以 JSON 格式进行序列化。

严格验证函数的前缀

以前的级别: 不对函数前缀执行严格验证。

1.2 级别: Azure 流分析严格验证函数前缀。 将前缀添加到内置函数会导致出错。 例如,myprefix.ABS(…) 不受支持。

将前缀添加到内置聚合也会导致出错。 例如,myprefix.SUM(…) 不受支持。

对用户定义的任何函数使用前缀“system”会导致出错。

不允许在 Azure Cosmos DB 输出适配器中使用数组和对象作为键属性

以前的级别: 支持使用数组和对象类型作为键属性。

1.2 级别: 不再支持使用数组和对象类型作为键属性。

反序列化 JSON、AVRO 和 PARQUET 中的布尔类型

以前的级别: Azure 流分析将布尔值反序列化为 BIGINT 类型 - false 映射到 0,true 映射到 1。 如果将事件显式转换为 BIT,则输出仅在 JSON、AVRO 和 PARQUET 中创建布尔值。 例如,传递查询(例如 SELECT value INTO output1 FROM input1 从 input1 读取 JSON { "value": true })会将 JSON 值 { "value": 1 } 写入 output1 中。

1.2 级别:Azure 流分析将布尔值反序列化为 BIT 类型。 false 映射到 0,true 映射到 1。 传递查询(例如 SELECT value INTO output1 FROM input1 从 input1 读取 JSON { "value": true } )会将 JSON 值 { "value": true } 写入到 output1 中。 可以将值强制转换为查询中的 BIT 类型,以确保它们在支持布尔类型的格式的输出中显示为 true 和 false。

兼容性级别 1.1

在兼容性级别 1.1 中引入了以下重大更改:

服务总线 XML 格式

1.0 级别: Azure 流分析使用 DataContractSerializer,因此消息内容包括 XML 标记。 例如:

@\u0006string\b3http://schemas.microsoft.com/2003/10/Serialization/\u0001{ "SensorId":"1", "Temperature":64\}\u0001

1.1 级别: 消息内容只包含流,没有其他的标记。 例如: { "SensorId":"1", "Temperature":64}

对字段名称保留区分大小写

1.0 级别: 在由 Azure 流分析引擎处理时,字段名称更改为小写。

1.1 级别: 由 Azure 流分析引擎处理字段名称时,对字段名称保留区分大小写。

注意

保留区分大小写尚不适用于使用 Edge 环境托管的流分析作业。 因此,如果在 Edge 上托管作业,所有字段名称都将转换为小写。

FloatNaNDeserializationDisabled

1.0 级别:CREATE TABLE 命令不使用 NaN(非数值。例如,Infinity、-Infinity)在 FLOAT 列类型中筛选事件,因为对于这些数字来说,事件不在已记录的范围之内。

1.1 级别: CREATE TABLE 允许指定强架构。 流分析引擎验证数据是否符合此架构。 使用这一模型,该命令可以通过 NaN 值筛选事件。

对于 JSON,在入口处禁用日期/时间字符串到 DateTime 类型的自动转换

1.0 级别: JSON 分析器会在入口处将包含日期/时间/区域信息的字符串值自动转换为 DATETIME 类型,使该值立即丢失其原始格式和时区信息。 因为这是在入口处完成的,所以即使查询中没有使用该字段,它也会转换为 UTC DateTime。

1.1 级别: 没有将包含日期/时间/区域信息的字符串值自动转换为 DATETIME 类型。 因此,时区信息和原始格式保持不变。 但是,如果在查询中使用 NVARCHAR(MAX) 字段作为 DATETIME 表达式的一部分(例如 DATEADD 函数),它将被转换为 DATETIME 类型来执行计算,并且会失去其原始形式。

后续步骤