Azure 数据工厂将 json 文件的子节点父级复制到另一个 Blob 存储

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

我有多个 JSON 文件,我正在搜索文件内容的特定元素。如果匹配,则将{metadata}内的父节点和子节点复制到另一个存储。 到目前为止,如果符合条件,它会将整个 JSON 文件复制到另一个 Blob 存储。

示例.json:

{
"record": {
    "org":{
        "name": "School",
         "postalCode": "40121"
    },
    "metadata": {
         "an": "file6.json",
         "markings": {
              "document": {
                 "distribution": {
                    "code": "A"
                  }
               }     
          },
         "publicationDate": {
               "date": "2022-11-25"
          }
     }
  }
}

如果条件匹配,则结果sample.json只有元数据{..}将被复制到另一个存储:

    "metadata": {
         "an": "file6.json",
         "markings": {
              "document": {
                 "distribution": {
                    "code": "A"
                  }
               }     
          },
         "publicationDate": {
               "date": "2022-11-25"
          }
     }
  

但是我的 ADF 将整个 json 复制到另一个存储。

enter image description here

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

您可以通过使用临时csv文件来实现您的要求。

创建一个临时 csv 文件,如下所示。

one
1

检查您的条件后,在 if 活动True 活动中创建一个带有以下表达式的设置变量活动。在查找活动中启用firstRow

@concat('{"metadata":',activity('Lookup1').output.firstRow.record.metadata,'}')

在这里,我跳过了 if 活动。

enter image description here

然后以上述临时 CSV 数据集为源进行复制活动。在附加列中,创建一个新列

new
并在动态表达式中给出上述变量,如下所示。

enter image description here

在接收器中,创建一个 CSV 数据集,您可以使用数据集参数作为文件名。提供以下配置,以便它使用 csv 数据集创建 JSON 文件。

enter image description here

将您所需的目标文件名指定为上述参数的

<fiename>.json

现在,转到复制活动的映射并将以下表达式作为动态内容。

@json('{
                                    "type": "TabularTranslator",
                                    "mappings": [
                                        {
                                            "source": {
                                                "name": "new",
                                                "type": "String"
                                            },
                                            "sink": {
                                                "type": "String",
                                                "physicalType": "String",
                                                "ordinal": 1
                                            }
                                        }
                                    ],
                                    "typeConversion": true,
                                    "typeConversionSettings": {
                                        "allowDataTruncation": true,
                                        "treatBooleanAsNumber": false
                                    }
                                }')

enter image description here

现在,运行管道,它将为每次迭代创建所需的 JSON 文件,如下所示。

enter image description here

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