即将针对新环境进行的 JSON 平展和转义规则更改
注意
时序见解服务将于 2024 年 7 月 7 日停用。 请考虑尽快将现有环境迁移到备用解决方案。 有关弃用和迁移的详细信息,请访问我们的文档。
重要
这些更改将仅适用于新创建的 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"}
"value": {"tsx": "$event['series']['value'].Double"}