即将针对新环境的 JSON 平展和转义规则进行更改
重要
这些更改将仅应用于 新创建的 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"}