【问题标题】:Collect exp. Function with distinct Values in Mapping Data Flow ADF Aggregate Transformation收集经验。映射数据流 ADF 聚合转换中具有不同值的函数
【发布时间】:2020-07-17 03:43:52
【问题描述】:

我想使用 collect(column1) 函数来收集 Agg 中的 group By column2 的所有行值。转型。但由于 column1 具有重复值,因此我在返回的数组中得到重复值。我想要一个收集所有不同值的函数。

【问题讨论】:

    标签: azure-data-factory dataflow collect


    【解决方案1】:

    没有collectDistinct()函数,所以不能通过数据流中的函数来实现。

    你可以试试这个: 创建两个聚合转换。

    首先,按基本型号和modelDocId分组,然后添加一列(DModelDocId),表达式为first(modelDocId)

    其次,按基本型号分组,然后添加一列(modelDocIds),表达式为collect(DModelDocId)

    希望对你有帮助。

    【讨论】:

    • 谢谢史蒂夫。那确实解决了我的问题。我有另一个关于动态 json 对象的问题,因为映射数据流不允许我提供 json 键值作为变量或通过修改值来创建它。我在另一个问题中有它。请仔细查看。
    【解决方案2】:

    已经回答了这个问题,但是在这样的聚合情况下,有一种更简单的方法可以收集唯一值,而无需另一个 group by。在我们的场景中,我们有如下数据

    | ORDER_NO |品牌 |

    | -------- | -------------- |

    | ORD001 | ExampleBrand1 |

    | ORD001 | ExampleBrand1 |

    | ORD001 | ExampleBrand2 |

    我们希望每个 ORDER_NO 占一行,并在其中列出独特的品牌。示例输出如下

    | ORDER_NO |品牌 |

    | -------- | -------------- |

    | ORD001 | ExampleBrand1,ExampleBrand2 |

    所以我们确实在 ORDER_NO 上添加了一个聚合转换(分组依据),并使用 collect(BRAND) 将所有 BRAND 值收集到一个名为 BRANDS_ARR 的数组中。

    在此之后,我们添加了派生列转换,并将 BRAND 字符串数组转换为唯一字符串 BRANDS,如下所示

    栏名:品牌

    表达式: toString(reduce(BRANDS_ARR, '', iif((instr(#acc, #item) > 0), #acc, #acc + #item + ',') , #result))

    请注意,我们使用带有 iif 和 instr 函数的 reduce 函数来决定是否应该累积下一个值。这样一来,重复项就会被过滤,并且您会获得类似“Set”的功能。

    Nit:上面的 sn-p 后面多了一个逗号,可以很容易地用 replace 函数去掉。

    【讨论】:

      猜你喜欢
      • 2020-02-24
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 2010-09-20
      • 2021-01-31
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多