在ADF复制数据活动中解析合并JSON为完整行数据CSV
提取所有rows数组数据并生成CSV的ADF实现方案
核心思路
你当前的问题根源是未正确遍历展开JSON中嵌套的tables节点下的rows数组,导致仅提取到首行数据。以下提供两种可行的ADF实现方案:
方式一:使用数据流(推荐,灵活性更高)
1. 配置数据源
新建数据流,添加源数据集:
- 指向合并后的JSON文件(或直接指向分散JSON文件所在的文件夹,无需提前合并)
- JSON格式设置:如果合并后的JSON结构为
{"tables": [{"rows": [...], ...}, ...]},将根路径设为$['tables'],让ADF识别tables数组为数据源的根层级
2. 扁平化rows数组
添加Flatten转换:
- 在转换设置中,选择
rows列作为要展开的数组,设置为展开为新行,将每个rows数组内的业务对象拆分为单独的数据行 - 如果
rows内是无键数组(如["PipelineA", "Succeeded", ...]),需先通过派生列给每个索引位置指定列名:
完成后再执行扁平化操作PipelineName = rows[0] Status = rows[1]
3. 过滤并选择目标列
添加Select转换,仅保留需要的业务字段(如PipelineName、Status),剔除tables中的其他无关属性
4. 输出为CSV
添加接收器数据集,格式选择CSV,配置存储路径、文件名及分隔符等参数,将数据流添加到管道中执行即可
方式二:使用复制活动(快速实现)
如果不需要复杂的数据转换,可直接在复制活动中配置:
- 源数据集的JSON路径表达式设置为
$..rows[*],该表达式会递归提取所有tables节点下rows数组的所有元素 - 接收器选择CSV数据集,在映射面板中确认字段对应关系,确保所有业务字段正确映射到CSV列
关键注意事项
- 若分散的JSON文件结构一致,可直接读取文件夹下所有文件,无需提前合并,ADF会自动批量处理
- 需根据实际JSON结构调整路径:如果合并后的JSON是
tables数组直接包裹(如[{"rows": [...], ...}, ...]),路径改为$[*].rows[*] - 若
rows内是结构化对象(如{"PipelineName": "xxx", "Status": "xxx"}),扁平化后可直接映射字段,无需手动指定索引
内容的提问来源于stack exchange,提问作者user12309502
相关产品推荐
相关产品推荐

