更新数据流 ADF 中的字段值

问题描述 投票:0回答:1

如何将 json 文件中的“Family.age”字段从 27 更新为 40? 我尝试派生该列,但它没有更新该值。我是 ADF 新手,不确定配置是否正确。

 {
"Family": {
    "first_name": "John",
    "last_name": "Smith",
    "is_alive": true,
    "age": 27,
    "address": {
        "street_address": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postal_code": "10021-3100"
    },
    "phone_numbers": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "office",
            "number": "646 555-4567"
        }
    ],
    "children": [
        "Catherine",
        "Thomas",
        "Trevor"
    ]
 }
}   

此表达式确保保留 Family 对象中的所有元素,并且仅将年龄字段更新为 40(如果是 27)。但是,结果年龄值保持不变。

列:年龄,以及 表达式: iif((Family.age == 27, 40, Family.age)

enter image description here

azure-data-factory
1个回答
0
投票

我尝试使用 select 和派生列更新内部 JSON 值。首先,我提取了内部

age
列并更新为所需的值。然后,我使用派生列转换来生成所需的 JSON。但我无法做到这一点,因为它需要手动提及所有列名称,并且还需要类型转换。

所以,我尝试了以下方法来实现您的要求。仅当您需要 JSON 文件中的输出时,此方法才有效。

首先,使用派生列转换并使用以下表达式创建一个字符串列

str

concat('{"Family":',replace(toString(Family),'"age":27','"age":40'),'}')

enter image description here

上面的表达式将

Family

 对象转换为字符串,并用更新后的值替换所需的键和值对,并与外部键名称 
Family
 连接并生成所需的 JSON 作为字符串,如下所示。

enter image description here

现在,使用选择转换删除额外的列

Family

。在接收器中,使用 csv 数据集生成所需的 JSON。在 csv 数据集中,给出以下配置。

enter image description here

在数据流接收器中,将输出设置为单个文件并给出如下所示的

<filename>.json

enter image description here

从管道运行数据流,所需的 JSON 文件将在接收器位置生成。

enter image description here

当您想使用此 JSON 文件时,您需要根据您的要求为此创建一个 JSON 数据集。

© www.soinside.com 2019 - 2024. All rights reserved.