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

Azure Synapse查询ADF日志出现JSON_VALUE报错及JSON截断问题求助

你遇到的13609 JSON格式报错和jsonContent截断问题,核心是当前OPENROWSET的分隔符配置错误,没有正确匹配ADF运行日志每行一条JSON的存储格式,解决方案如下:

1. 修正OPENROWSET核心配置

替换你的查询语句中OPENROWSET部分的参数,修改后的完整查询示例如下:

SELECT TOP 100
cast(r.filepath(3) as varchar(100)) as [FACTORIE_NAME]
,cast(r.filepath(4) as varchar(4)) as [year]
,cast(r.filepath(5) as varchar(2)) as [month]
,cast(r.filepath(6) as varchar(2)) as [day]
,cast(r.filepath(7) as varchar(2)) as [hour]
,cast(r.filepath(8) as varchar(2)) as [minute]
,JSON_VALUE(jsonContent, '$.runId') as [pipelineRunId]
,JSON_VALUE(jsonContent, '$.pipelineName') as [pipelineName]
FROM
OPENROWSET(
    BULK 'https://blobDemo.blob.core.windows.net/insights-logs-activityruns/resourceId=/SUBSCRIPTIONS/*/RESOURCEGROUPS/*/PROVIDERS/MICROSOFT.DATAFACTORY/FACTORIES/*/y=*/m=*/d=*/h=*/m=*/*.json',
    FORMAT = 'CSV',
    FIELDTERMINATOR = '0x00',
    ROWTERMINATOR = '0x0a',
    CODEPAGE = '65001',
    PARSER_VERSION = '2.0'
)
WITH (
    jsonContent varchar(MAX)
) AS [r]
WHERE   
    r.filepath(4) = '2021' and r.filepath(5) = '07' and r.filepath(6) = '22'

核心修改点说明:

  • 将FIELDTERMINATOR改为0x00(空字符),该字符不会出现在标准JSON内容中,确保单条日志的所有内容都会被读取到jsonContent单个字段中,不会被误拆分
  • 将ROWTERMINATOR改为0x0a(标准换行符),匹配ADF运行日志每行存储一条JSON记录的格式,正确拆分不同运行日志
  • 新增CODEPAGE = '65001'指定UTF-8编码,兼容ADF日志的默认导出编码
  • 新增PARSER_VERSION = '2.0'启用Synapse无服务池最新的CSV解析器,对varchar(max)类型的字段支持更稳定,避免超长JSON被截断
  • WHERE条件中的filepath值改为字符串格式匹配,避免隐式类型转换导致的分区过滤失效

2. 可选容错配置

如果仍有偶发的JSON格式报错,可以在OPENROWSET的参数中新增MAXERRORS = 1000,允许跳过最多1000行损坏的日志记录,避免少量坏数据导致整个查询失败。如果需要定位损坏的日志,可以先查询匹配文件的路径,逐个文件测试读取,定位到损坏文件后单独处理即可。

3. 验证方法

修改配置后先执行SELECT TOP 10 jsonContent FROM [上述OPENROWSET查询逻辑],检查返回的jsonContent是否为完整的JSON字符串,确认无截断后再执行JSON_VALUE等解析逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:51:04