收集经验。映射数据流 ADF 聚合转换中具有不同值的函数

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

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

azure-data-factory dataflow collect
3个回答
1
投票

这个问题已经得到解答,但是有一种更简单的方法可以在这样的聚合情况下收集唯一值,而不需要另一个分组依据。在我们的场景中,我们的数据如下

|订单号 |品牌 |

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

| ORD001 |示例品牌1 |

| ORD001 |示例品牌1 |

| ORD001 |示例品牌2 |

我们希望将每个 ORDER_NO 排成一行,并列出独特的品牌。示例输出如下

|订单号 |品牌 |

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

| ORD001 |示例品牌 1、示例品牌 2 |

因此,我们在 ORDER_NO 上添加了聚合转换(group by),并使用collect(BRAND)来收集名为 BRANDS_ARR 的数组中的所有 BRAND 值。

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

栏目名称:品牌

表达:

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

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

Nit:上面的代码片段最后有一个额外的逗号,可以使用替换功能轻松删除。


0
投票

没有collectDistinct()函数,所以你无法通过数据流中的函数来实现这一点。

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

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

first(modelDocId)

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

collect(DModelDocId)

希望这可以帮助你。


0
投票

或者您可以使用ADF内置的collectUnique()。 或者您可以同时使用collect()和distinct()方法。这样你就不必聚合两次。例如:distinct(collect(column_name))

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