如何通过.NET(C#)将JSON&Avro事件直接导入ADX(跳过Blob存储)
Azure Event Hub直接导入ADX常见问题及解决
需求背景
需直接通过Azure Event Hub捕获JSON/Avro格式事件,导入Azure Data Explorer(ADX),跳过Blob存储或Event Grid环节。
已执行操作
- 创建Event Hub命名空间及Event Hub(主题)
- 在Event Hub Schema Registry中创建对应类型的Schema组及Schema(缺少JSON Schema定义细节)
- 通过.NET SDK(C#)完成事件的发送、接收验证
- 尝试ADX一键导入:包括新建表导入、预创建表+映射两种方式,均未成功捕获事件,需明确表/映射配置、Event Hub连接创建及格式处理细节
使用的KQL脚本
.create table test123 ( RGUID: string, EnvironmentName: string, MachineName: string, DateTimeUTC: long )
.create table test123 ingestion avro mapping 'test123Mapping1' '[{"column":"RGUID","Properties":{"Field":"$.RGUID"}},{"column":"EnvironmentName","Properties":{"Field":"$.EnvironmentName"}},{"column":"MachineName","Properties":{"Field":"$.MachineName"}},{"column":"DateTimeUTC","Properties":{"Field":"$.DateTimeUTC"}}]'
遇到的问题及解决方法
问题1:数据库级Event Hub连接创建成功,但事件被丢弃,错误码BadRequest_InvalidBlob
- 修正映射格式:当前Avro映射误用了JSON路径表达式(
$.RGUID),Avro映射需直接使用字段原始名称,无需路径前缀。正确的映射脚本:
.create table test123 ingestion avro mapping 'test123Mapping1' '[{"column":"RGUID","Properties":{"Field":"RGUID"}},{"column":"EnvironmentName","Properties":{"Field":"EnvironmentName"}},{"column":"MachineName","Properties":{"Field":"MachineName"}},{"column":"DateTimeUTC","Properties":{"Field":"DateTimeUTC"}}]'
- 校验消息格式:确保发送到Event Hub的是单条Avro/JSON记录,而非批量打包的多条记录;若使用Schema Registry,消息必须严格匹配注册的Schema,无字段缺失或类型不匹配。
- 检查连接配置:创建Event Hub连接时,确认数据格式选择与实际消息格式一致(Avro/JSON),且共享访问策略拥有
Listen权限。
问题2:表层级“导入数据”向导无AVRO格式选项
表层级导入向导暂不支持Avro格式选择,需改用以下方式:
- 先在ADX数据库层级创建Event Hub连接,在“数据格式”下拉菜单中选择
Avro(JSON消息则选JSON)。 - 将该连接关联到预创建的
test123表及对应的映射,完成数据导入配置。
内容的提问来源于stack exchange,提问作者suresh pasupunuri
相关产品推荐
相关产品推荐

