json - Azure 数据资源管理器流摄取格式化的 JSON 文档

标签 json azure azure-eventhub azure-data-explorer data-ingestion

我们通过流摄取将 JSON 消息从事件中心摄取到 Azure 数据资源管理器中。

我用这个语句创建了一个表

.create table messages(SerialNumber: string, ReceivedUtcTime: datetime, IngestEventEnqueuedUtcTime: datetime, IngestEventProcessedUtcTime: datetime, ProcessEventEnqueuedUtcTime: datetime, MessageVersion: int, MessageType: string, Payload: dynamic)

使用此摄取映射:

.create-or-alter table messages ingestion json mapping "eventhub_mapping"
'['
  '{"column":"SerialNumber",                "path":"$.serialNumber",          "datatype":"string"     },'
  '{"column":"ReceivedUtcTime",             "path":"$.timestampUtc",          "datatype":"datetime"   },'
  '{"column":"IngestEventEnqueuedUtcTime",  "path":"$.eventEnqueuedUtcTime",  "datatype":"datetime"   },'
  '{"column":"IngestEventProcessedUtcTime", "path":"$.eventProcessedUtcTime", "datatype":"datetime"   },'
  '{"column":"ProcessEventEnqueuedUtcTime", "path":"$.x-opt-enqueued-time",   "datatype":"datetime"   },'  
  '{"column":"MessageVersion",              "path":"$.messageVersion",        "datatype":"int"        },'
  '{"column":"MessageType",                 "path":"$.messageType",           "datatype":"string"     },'
  '{"column":"Payload",                     "path":"$.payload",                 "datatype":"dynamic",   "transform":null    }'
']'

我们想要摄取的消息如下所示:

{
  "timestampUtc": "2022-03-07T00:00:00Z",
  "eventEnqueuedUtcTime": "2022-03-07T00:00:00Z",
  "eventProcessedUtcTime": "2022-03-07T00:00:00Z",
  "messageType": "Information",
  "messageVersion": 1,
  "serialNumber": "ser-1",
  "payload": {
    "TimestampUtc": "2022-03-07T00:00:00Z",
    "Value": 123.12
  }
}

当我尝试提取这些消息时,我在提取过程中遇到错误,并且表中没有存储任何内容。

但是,我发现,如果我将 JSON 作为单行传输而不进行格式化,消息将按预期存储。

所以这条消息有效:

{"timestampUtc":"2022-03-07T00:00:00Z","eventEnqueuedUtcTime":"2022-03-07T00:00:00Z","eventProcessedUtcTime":"2022-03-07T00:00:00Z","messageType":"Information","messageVersion":1,"serialNumber":"ser-1","payload":{"TimestampUtc":"2022-03-07T00:00:00Z","Value":123.12}}

这是预期的结果吗?或者我可以配置此行为以允许将每个有效的 JSON 提取到数据资源管理器中吗?

我已阅读有关 ingest multiline json 的选项但在创建摄取映射时似乎不支持这一点。

最佳答案

您需要在 EventHub 连接中或在摄取命令中(不在映射中)指定多行 json。

查看摄取属性 doc (特别是“格式”属性)并遵循 link查看要在摄取命令或 EventHub 连接中指定的格式的适用名称。

关于json - Azure 数据资源管理器流摄取格式化的 JSON 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71384763/

相关文章:

c# - 无法将 List<> 对象序列化/反序列化为 JSON

c# - 返回 ajax 请求错误的最佳方式是什么?

azure - 缩小 Azure 应用服务规模是否会导致服务器重新启动?

azure - 无法在 Azure 门户上创建 EventHubs 实例

c# - 如何使用 SAS 解决 Azure 事件中心中的授权错误 (401)?

javascript - 我可以将 RegExp 和 Function 存储在 JSON 中吗?

android - 按日期对 ListView 进行排序?

java - azure api 应用程序 (tomcat) 通过 kudu 编辑 server.xml

azure - Powershell - 创建 Azure 部署包

java - 如何使用 Spark 和 Java 来使用来自 Azure eventhub 的数据