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

即将针对新环境进行的 JSON 平展和转义规则更改

注意

2025 年 3 月之后,将不再支持时序见解 (TSI) 服务。 请考虑尽快将现有 TSI 环境迁移到备用解决方案。 有关弃用和迁移的详细信息,请访问我们的文档

重要

这些更改将仅适用于新创建的 Microsoft Azure 时序见解第 2 代环境。 它们不适用于第 1 代环境。

Azure 时序见解 Gen2 环境将按照一组特定的命名约定动态创建存储列。 引入事件时,时序见解将向 JSON 有效负载和属性名称应用一组规则。 2020 年 7 月,已开始在新的 Azure 时序见解第 2 代环境中应用对 JSON 数据的平展和存储方式的更改。 在以下情况下,此更改会对你造成影响:

  • JSON 有效负载包含嵌套对象。
  • JSON 有效负载包含数组。
  • 在 JSON 属性名称中使用下面四个特殊字符中的任意一个:[\.'
  • 嵌套对象内有一个或多个时序 (TS) ID 属性。

如果你创建一个新环境,并且上述一个或多个事例适用于你的事件负载,则数据将以不同方式进行平展和存储。 下表概述了这些更改:

当前规则 新规则 示例 JSON 以前的列名 新列名
使用下划线作为分割线来平展嵌套的 JSON。 使用句点作为分割线来平展嵌套的 JSON。 {"series" : { "value" : 19.338 }} series_value_double series.value_double
不转义特殊字符。 包含特殊字符 .[\' 的 JSON 属性名称使用 [''] 进行转义。 在 [''] 中,额外转义单引号和反斜杠。 单引号将写为 \',反斜杠将写为 \\ "Foo's Law Value": "17.139999389648" Foo's Law Value_double ['Foo\'s Law Value']_double
基元数组存储为字符串。 基元类型的数组存储为动态类型。 "values": [154, 149, 147] values_string values_dynamic
始终平展对象数组,这会生成多个事件。 如果数组中的对象没有 TS ID 或时间戳属性,则对象数组将整体存储为动态类型。 "values": [{"foo" : 140}, {"bar" : 149}] values_foo_long | values_bar_long values_dynamic

如果 TS ID 和/或时间戳属性嵌套在对象中

任何新部署都需要匹配新的引入规则。 例如,如果 TS ID 为 telemetry_tagId,则需要更新任何 Azure 资源管理器模板或自动部署脚本,将 telemetry.tagId 配置为环境 TS ID。 还需要对嵌套的 JSON 中的事件源时间戳进行此更改。

如果有效负载包含嵌套的 JSON 或特殊字符,并且你可以自动创作时序模型变量表达式

更新执行 TypesBatchPut 的客户端代码,以匹配新的引入规则。 例如, 之前的时序表达式应更新为以下选项之一:

  • "value": {"tsx": "$event.series.value.Double"}
  • "value": {"tsx": "$event['series']['value'].Double"}

后续步骤