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

ADF源启用schema drift时展开动态JSON数组报scala.MatchError如何解决

你遇到的scala.MatchError错误核心原因是:ADF数据流Flatten转换的Unroll By字段不支持直接传入包含byName()的动态构造函数节点。开启schema drift后元数据在编译期不存在,你写的array(byName('Columnname'))会被识别为未解析的函数节点,无法匹配Unroll By要求的列引用类型,就会触发匹配错误。

正确操作步骤

1. 新增派生列转换预处理动态数组列

在源转换和Flatten转换之间插入派生列转换,提前将动态数组列提取为可被直接引用的普通列:

  • 如果目标数组是顶层列,派生列表达式写:
    target_array = byName('Columnname')
  • 如果目标数组是嵌套在其他对象下的列,比如路径为parent_obj.child_array,派生列表达式写:
    target_array = byName('parent_obj').getItem('Columnname')

派生列配置时可以手动将输出类型指定为对应的数组类型(比如数组元素为对象则选Array(Complex),元素为字符串则选Array(String)),避免运行时类型推断异常

2. Flatten转换中直接引用预处理后的数组列

进入Flatten转换配置页面,Unroll By字段直接选择上一步生成的target_array列即可。如果下拉列表中看不到该列,手动输入列名target_array即可,开启schema drift的场景下ADF会在运行时自动匹配对应的列。

注意事项
  • Unroll By字段仅支持直接传入列引用,不支持直接传入byName()、array()这类运行时计算的函数表达式,这是ADF数据流的现有规则
  • 如果数组列名本身也是动态的,可通过数据流参数传递列名,派生列表达式调整为byName($数组列名参数)即可
  • 建议在源转换的Projection配置项中开启Infer drifted column types,让ADF自动推断漂移列的数据类型,减少手动配置的工作量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:06:02