如何在Azure数据工厂中比较2个JSON文件

mfpqipee  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(182)

我是Azure数据工厂的新手。我想通过Azure数据工厂比较2个JSON文件。**我们需要获取当前JSON文件中的ID的新列表,这些ID不在以前的JSON文件中。**以下是2个示例JSON文件。

上一个JSON文件:

{
  "count": 2,
  "values": [
    {
      "id": "4e10aa02d0b945ae9dcf5cb9ded9a083"
    },
    {
      "id": "cbc414db-4d08-48f2-8fb7-748c5da45ca9"
    }
  ]
}

当前JSON文件

{
  "count": 3,
  "values": [
    {
      "id": "4e10aa02d0b945ae9dcf5cb9ded9a083"
    },
    {
      "id": "cbc414db-4d08-48f2-8fb7-748c5da45ca9"
    },
    {
      "id": "5ea951e3-88d7-40b4-9e3f-d787b94a43c8"
    }
  ]
}

新ID必须执行一个活动,旧ID必须执行另一个活动。我们的时间不多了,请帮助我。
提前感谢!

pokxtpni

pokxtpni1#

您只需使用IfCondition活动

If表达式:

@equals(activity('Lookup1').output.value,activity('Lookup2').output.value)

此外,我还使用失败活动表示False条件,以获得更好的可见性。

--

查找1活动--〉Json1.json

查找2活动--〉Json2.json

x1c4d 1x指令集

jogvjijk

jogvjijk2#

这可以使用单个Filter Activity来完成。我已经为您的Previous Json和Current Json文件分别分配了两个参数“Old_json”和“New_json”。在Filter Activity的设置中,

  • 项目:@pipeline().参数.新建_json.值
  • 条件:@not(包含(管道().参数.旧_Json.值,项()))

因此,这个过滤器活动会遍历New json中的每个条目,并检查它们是否存在于旧json中。如果不存在,则会给予其作为输出。
Output of the filter activity

vfhzx4xs

vfhzx4xs3#

感谢@KarthikBhyresh-MT提供的有用答案。
再补充一点,如果(像我一样)您想要比较两个文件(或者在我的例子中,一个文件带有一个SQL查询的输出),但是不关心记录的顺序,您可以使用ForEach活动来完成此操作。这样做的好处还在于,当文件之间存在差异时,允许出现更具体的错误消息。

我的第一个If条件使用以下表达式检查两个文件是否具有相同的行数:

@equals(activity('Select from SQL').output.count, activity('Lookup from CSV').output.count)

“假”分支将指向一个失败活动,并显示以下消息:

@concat(pipeline().parameters.TestName, ': CSV has ', string(activity('Lookup from CSV').output.count), ' records but SQL query returned ', string(activity('Select from SQL').output.count))

如果成功,流将传递到一个ForEach,迭代以下项:

@activity('Lookup from CSV').output.value

...它包含一个If条件,表达式为:

@contains(string(activity('Select from SQL').output.value), string(item()))

If条件的False分支包含一个Append variable活动,该活动将追加到我已添加到名为MismatchedRecords的管道中的变量。追加的值为:

@item()

ForEach之后,最后的If条件会检查MismatchedRecords是否包含任何项目:

@equals(length(variables('MismatchedRecords')), 0)

...“假”分支包含另一个失败活动,并显示消息:

@concat(string(length(variables('MismatchedRecords'))), ' records from CSV not found in SQL. Missing records: ', string(variables('MismatchedRecords')), ' SQL output: ', string(activity('Select from SQL').output.value))

该消息包含有关无法匹配的记录的特定信息,以便进行进一步调查。

相关问题