使用Azure数据工厂搜索json文件中的内容

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

如何使用Azure数据工厂查询JSON文件中的内容? 我想过滤在标记>文档>代码中包含条件 "code":"B" 和在元数据>发布日期>日期中包含 "date":"2020-01-01" 的任何 JSON 文件。如果匹配,则将 json 文件传输到另一个存储。

示例 json:

{
   "record":{
       "ns":"mra",
       "type":"REC",
       "record":{
           "ns":"rec",
           "id":1001,
           "markings":{
               "document":{
                   "ns":"rec",
                   "code":"B"
               }
            }
       }
  },
  "metadata": { 
      "an": "0002641",
      "markings":{
         "record":{
            "distribution":{
                 
            }
         }   
     },
    "publication date:":{
        "date":"2020-01-01"
    }
  }
}   
azure azure-data-factory
1个回答
0
投票

由于您的源文件位于存储帐户中的单个文件夹中,因此您可以尝试以下方法来实现您的要求。

使用Dataflow获取满足该条件的Json文件名列表。

创建 JSON 数据集,仅给出数据集中文件夹的路径,并且不要在数据集的文件名中给出任何名称。

在数据流的源中,提供此数据集并使用通配符文件路径

*.json
,并为存储文件名的列指定名称,如下所示。

enter image description here

接下来,使用过滤变换来设置过滤条件。给出下面的动态表达式来过滤出所需的记录。

iif(hasPath('record.record.markings.document.code')&&(hasPath('metadata.{publication date:}.date')),(record.record.markings.document.code=='B')&&(metadata.{publication date:}.date=='2020-01-01'),toBoolean('false'))

enter image description here

这将给出如下结果。记录和文件名将被过滤掉。

enter image description here

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

要将此列数据发送到管道,请使用 sink 缓存

enter image description here

在管道中,添加数据流活动并将日志记录级别设置为,然后取消选中数据流活动中接收器属性仅第一行选项。

运行管道,它将在数据流输出中给出所需的 Json 文件名,如下所示。

enter image description here

您需要 将此数组传递到 For 循环,并使用带有参数化数据集的复制活动作为文件名,并在每次迭代中将每个文件复制到其目标

在数据流活动之后添加一个 For-each 活动,并给出以下表达式以将上述数组传递给 for 循环。

@activity('<Data flow activity name>').output.runStatus.output.<sink_name>.value
© www.soinside.com 2019 - 2024. All rights reserved.