You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kusto流式摄入异常排查:Azure Functions从Event Hub到ADX部分记录失败

部分Event Hub记录摄入ADX失败,错误码80131500排查方案

针对你遇到的部分记录摄入ADX失败、抛出CreateRowStoreValueFromStream错误码80131500的问题,核心原因大概率是数据类型不匹配或特殊数据结构不兼容,以下是具体排查和解决方向:

1. 检查ADX表testTable的字段类型定义

你的Model中Details字段是object?类型,反序列化后会对应任意JSON结构。如果ADX表中Details列的类型不是dynamic,而是string或其他固定类型,就会导致部分结构复杂的记录无法被ADX解析。

  • 执行Kusto命令查看表结构:
    .show table testTable schema
    
  • 确保Details列类型为dynamic,如果不是,修改表结构:
    .alter table testTable alter column Details dynamic
    

2. 排查Details字段的实际内容差异

虽然反序列化成功,但部分记录的Details可能包含ADX无法处理的内容:

  • 嵌套过深的JSON结构
  • 包含特殊数值(如NaN、Infinity)
  • 非标准JSON格式的.NET对象(比如包含循环引用)
  • 在函数中添加日志,输出失败记录的Details内容,对比成功/失败记录的差异:
    foreach (EventData eventData in events)
    {
        string data = Encoding.UTF8.GetString(eventData.EventBody.ToArray());
        var obj = JsonConvert.DeserializeObject<Model>(data);
        try
        {
            await output.AddAsync(obj);
        }
        catch (Exception ex)
        {
            log.LogError($"Ingestion failed for Id: {obj?.Id}, Details: {JsonConvert.SerializeObject(obj?.Details)}, Error: {ex.Message}");
            throw;
        }
    }
    

3. 验证Time字段的时间格式兼容性

ADX对datetime类型的解析有严格要求,部分记录的时间格式可能不符合标准:

  • 确保Event Hub中的时间字符串是ISO 8601格式(如2024-05-20T12:34:56Z)
  • 反序列化时强制指定时区为UTC,避免时区转换问题:
    var obj = JsonConvert.DeserializeObject<Model>(data, new JsonSerializerSettings
    {
        DateTimeZoneHandling = DateTimeZoneHandling.Utc
    });
    

4. 检查ADX流式摄入的配额限制

流式摄入对单条记录的大小、批次大小有配额限制:

  • 单条记录大小不能超过4MB
  • 单批次大小不能超过100MB
    如果失败记录的Details字段过大,可能触发配额限制,导致摄入失败。

内容的提问来源于stack exchange,提问作者DxG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:39:54