【问题标题】:Filter Lookup Results from values in Second Lookup in Azure Data Factory从 Azure 数据工厂中的第二次查找中的值筛选查找结果
【发布时间】:2020-09-15 17:18:55
【问题描述】:

我在 ADF 中的“直到”活动中有两个查找。第一个查找 (BookList) 是一个类似于下面列出的 JSON 的书籍列表。

[
  {
    "BookID": 1,
    "BookName": "Book A"
  },
  {
    "BookID": 2,
    "BookName": "Book B"
  }
]

第二个查找是我想从下面列出的第一个列表 (ExcludedBooks) 中排除的书籍列表。

[
  {
    "BookID": 2,
    "BookName": "Book B"
  }
]

在这两个查找之后,我有一个过滤器活动,其项目是来自BookList 查找的值。我希望过滤条件基于 ExcludedBooks 值中未列出的 BookID 值,但我不确定如何根据 ADF 中的收集函数编写此条件。下面列出了我所拥有的那些不起作用。

@not(contains(activity('ExcludedBooks').output.value, item().BookID))

我意识到解决此问题的一种方法是遍历 ExcludedBooks 的每条记录并使用 SetVariable Activity 来构建 BookID 数组,这些 BookID 可以与集合函数 Contains() 一起使用,但由于某种原因 ADF 不允许嵌套活动组(Until 中的 ForEach)。

我也无法在“直到”活动之外设置排除书籍的列表,因为它会随着“直到”活动的每次迭代而改变。我还意识到嵌套组活动限制的解决方法是创建一个完全不同的管道,但这并不理想,并且在尝试返回结果时会产生不必要的复杂性。

是否有人对如何根据另一个查找的结果过滤查找结果有任何建议?

【问题讨论】:

    标签: azure-data-factory


    【解决方案1】:

    下面的表达式不起作用,因为activity('ExcludedBooks').output.value 的项目是对象,item().BookID 是数字。

    @not(contains(activity('ExcludedBooks').output.value, item().BookID))

    如果您在ExcludedBooks 中的每个项目与您在BookList 中的项目相同(如您提供的示例),您可以使用此表达式:@not(contains(activity('ExcludedBooks').output.value, item()))

    我的测试结果:

    另一方面,如果您在ExcludedBooks 中的项目像这样的json(BookList 与您提供的相同):

    [
      {
        "BookID": 2,
        "BookName": "Book B",
        "num": 22
      }
    ]
    

    您只能使用以下表达式比较他们的BookID@not(contains(join(activity('ExcludedBooks').output.value,','),concat('"BookID":',item().BookID,',')))

    (将activity('ExcludedBooks').output.value转换为字符串,将'BookList'中的item()转换为"BookID":2,并检查'ExcludedBooks'字符串是否包含'BookList'项目字符串)

    我的测试结果:

    希望对你有帮助。

    【讨论】:

    • 非常有帮助的答案。谢谢。
    猜你喜欢
    • 2020-12-31
    • 2022-08-25
    • 2020-08-22
    • 2022-07-06
    • 2021-12-17
    • 2022-11-11
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多