Azure ADX适配MQTT-IoT Hub的数据格式及数据映射问题
问题解决:MQTT示例数据格式与ADX映射配置
一、MQTT示例实际发送的数据格式
你使用的Windows版MQTT示例,发送的是模拟传感器数据,JSON结构如下:
{ "deviceId": "你的设备ID", "temperature": 25.3, "humidity": 58.1 }
注意:IoT Hub监控界面显示的origin和payload是事件的元数据信封结构,实际业务数据嵌套在payload字段内,而非整个事件就是origin+payload的结构。
二、正确的ADX配置步骤
1. 创建匹配的ADX表
先创建与业务数据字段匹配的表:
.create table SensorData (deviceId:string, temperature:real, humidity:real)
2. 创建正确的JSON摄入映射
ADX从IoT Hub摄入数据时,默认会解析消息的实际payload内容(而非IoT Hub的整个事件信封),因此映射需对应payload内的具体字段:
.create table SensorData ingestion json mapping 'SensorDataMapping' '[{"column":"deviceId","path":"$.deviceId","datatype":"string"},{"column":"temperature","path":"$.temperature","datatype":"real"},{"column":"humidity","path":"$.humidity","datatype":"real"}]'
三、特殊场景配置(若需摄入完整事件信封)
如果你的ADX数据连接配置选择了摄入整个IoT Hub事件信封,则需调整表结构与映射:
// 创建包含元数据的表 .create table SensorDataFull (origin:string, payload:dynamic) // 对应信封结构的映射 .create table SensorDataFull ingestion json mapping 'SensorDataFullMapping' '[{"column":"origin","path":"$.origin","datatype":"string"},{"column":"payload","path":"$.payload","datatype":"dynamic"}]'
后续可通过parse_json(payload)语句从payload字段中提取具体业务数据。
内容的提问来源于stack exchange,提问作者otk
相关产品推荐
相关产品推荐

