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

无需投影实现单个Data Flow批量扁平化多Schema JSON文件

单一Data Flow处理多Schema JSON报告的实现方案

核心思路

利用Data Flow的Schema漂移和模式匹配能力,自动适配50种不同Schema的报告,无需手动创建投影或多个Data Flow。

步骤拆解

  1. 源数据集配置

    • 读取JSON文件时,开启允许Schema漂移(Allow schema drift),同时勾选推断漂移列类型(Infer drifted column types)。这会让Data Flow自动识别所有不同报告中的列,无需提前定义固定Schema。
    • 针对你提供的JSON结构(外层数组包裹Report_Entry数组),可将源的Root path设置为$[*].Report_Entry,直接定位到需要展开的条目数组,减少后续处理步骤。
  2. Flatten组件自动展开数组

    • 添加Flatten组件后,选择展开模式为模式匹配(Pattern matching)。
    • 在匹配规则中,指定目标数组列为Report_Entry(Schema漂移会自动识别该列),勾选展开所有匹配的列。这样不管Report_Entry内包含多少不同字段,都会自动展开,完全不需要手动添加投影。
    • 确保Flatten组件的漂移列处理设置为允许漂移,保留所有展开后的字段。
  3. 通用派生列处理

    • 对于固定逻辑的派生列(如报告类型、处理时间),直接用参数化实现:比如定义参数p_ReportType,派生列ReportType的值设为$p_ReportType。
    • 若派生列需要兼容不同报告的字段,用contains(names($), '字段名')判断字段是否存在,结合iif或isNull做兼容,示例:
      iif(contains(names($), 'ColumnX'), ColumnX, 'N/A')
      
  4. Parquet输出配置

    • 输出数据集同样开启允许Schema漂移,勾选自动映射漂移列,所有展开后的字段会自动写入Parquet文件。
    • 用参数化路径按报告类型分存储,示例路径表达式:
      @concat('output/', $p_ReportType, '/')
      

额外优化建议

  • 可添加Select组件,用模式匹配过滤列:比如保留所有以Column开头的字段+派生的标准列,避免无关字段输出。
  • 测试时用不同Schema的报告验证,确保漂移列都被正确捕获和处理。
  • 若存在空数组的情况,可在Flatten前添加Filter组件,过滤掉Report_Entry为空的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:55:12