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

注意

时序见解服务将于 2024 年 7 月 7 日停用。 请考虑尽快将现有环境迁移到备用解决方案。 有关废弃和迁移的详细信息,请访问我们的文档

重要

这些更改将仅应用于 新创建的 Microsoft Azure 时序分析 Gen2 环境。 这些更改不适用于 Gen1 环境。

Azure 时序洞察 Gen2 环境根据一组特定的命名约定动态创建存储列。 当事件被引入时,Time Series Insights 会将一组规则应用于 JSON 负载和属性名称。 2020 年 7 月起,针对新的 Azure 时序见解第二代环境,对 JSON 数据的平展和存储方式进行了更改并已生效。 在以下情况下,此更改会影响你:

  • 你的 JSON 负载中包含有嵌套结构的对象。
  • JSON 有效负载包含数组。
  • 在 JSON 属性名称中使用以下四个特殊字符中的任何一个:[\.'
  • 你的一个或多个时序 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"}
  • "value": {"tsx": "$event['series']['value'].Double"}

后续步骤