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

如何在Azure Data Factory数据流中修改动态复杂数据类型字段

解决复杂数据类型字段名的连字符替换问题(支持Schema Drift)

核心方案

因为存在Schema Drift(无法提前知晓字段名),必须用动态遍历表达式处理所有字段,在保留原层级结构的同时替换字段名中的连字符,避免生成根级列。

具体步骤

1. 开启Schema Drift支持

在数据流的数据源或前置转换中,启用允许Schema Drift,确保数据流能自动识别fraudData中的所有未知字段。

2. 用Derived Column生成修正后的复杂对象

添加Derived Column转换,输入以下表达式创建新的复杂列:

map(fraudData, (value, key) => @(replace(key, '-', '_'): value))
  • map()遍历fraudData的每个键值对
  • replace(key, '-', '_')把字段名里的连字符换成下划线
  • @(...)构造新的键值对,最终生成结构一致但字段名修正的复杂对象

3. 保留或替换原层级

  • 要原地修改:直接将Derived Column的输出列名设为fraudData,覆盖原列。
  • 要生成新列:命名为cleanedFraudData(或其他名称),之后用Select转换保留该列并移除原fraudData。

4. 嵌套结构处理(可选)

如果fraudData有多层嵌套子对象,可对每个嵌套层级重复使用map()表达式。例如,自动处理一层嵌套的复杂类型:

map(fraudData, (value, key) => 
    @(replace(key, '-', '_'): 
        if(isComplex(value), map(value, (v,k) => @(replace(k, '-', '_'): v)), value)
    )
)

这个表达式会判断字段是否为复杂类型,递归修正嵌套字段的名称。

替代方法:Select转换的动态映射

在Select转换中开启Schema Drift后,选中fraudData列,添加动态映射并使用以下表达式:

map($$, (value, key) => @(replace(key, '-', '_'): value))

$$代表当前选中的fraudData列,同样能生成修正后的复杂对象,不会拆分为根级列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:41:30