我想使用collect(column1)函数来收集Agg中一个group By column2的所有行值。转型。但是因为该column1有重复的值,所以我在返回的数组中有重复的值。我想要一个能收集所有不同值的函数。

发布于 2020-07-17 17:28:57
这里没有collectDistinct()函数,所以你不能通过数据流中的by函数来实现。
您可以尝试这样做:创建两个聚合转换。
首先,按基本型号和表达式分组,然后添加一个列(DModelDocId),表达式为first(modelDocId)。
其次,按基本型号分组,然后添加一个列(ModelDocIds),表达式为collect(DModelDocId)。
希望这能对你有所帮助。
发布于 2021-01-20 04:00:14
这个问题已经得到了回答,但有一种更容易的方法来收集像这样的聚合情况下的唯一值,而不需要另一个group by。在我们的场景中,我们有如下数据
ORDER_NO |品牌
-|
ORD001 | ExampleBrand1
ORD001 | ExampleBrand1
ORD001 | ExampleBrand2
我们想让它在每个ORDER_NO上占一行,并列出唯一的品牌。输出示例如下
ORDER_NO |品牌
-|
ORD001 | ExampleBrand1,ExampleBrand2
因此,我们在品牌上添加了一个聚合转换(group by),并使用collect ( ORDER_NO )收集名为BRANDS_ARR的数组中的所有品牌值。
之后,我们添加了一个派生列转换,并将品牌字符串数组转换为唯一的字符串品牌,如下所示
列名: BRANDS
表达式:toString(reduce(BRANDS_ARR, '', iif((instr(#acc, #item) > 0), #acc, #acc + #item + ',') , #result))
请注意,我们使用带有iif和instr函数的reduce函数来决定是否应该累加下一个值。这样,重复项就会被过滤掉,你就会得到一个类似于"Set“的功能。
Nit:上面的代码片段在最后得到了一个额外的逗号,使用replace函数可以很容易地去掉这个逗号。
https://stackoverflow.com/questions/62946748
复制相似问题