You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Workato中基于Apache DataFusion的SQL逗号分隔列表实现问题

解决Apache DataFusion(Workato)中值列表扁平化为逗号分隔字符串的问题

核心问题分析

你之前用array_agg+array_to_string加row_number()去重的方式丢数据,本质是没正确做分组聚合,导致聚合范围错误,后续去重时误删了包含有效数据的行。另外DataFusion里不用绕弯子转数组,直接用专门的字符串聚合函数更可靠。

可行解决方案

DataFusion支持list_agg聚合函数,直接实现“将分组内的列值去重后拼接成逗号分隔字符串”的需求,无需额外处理数组或去重行。

正确SQL写法示例

假设你的表名为your_table,需要按key_value分组,将三个列分别扁平化为逗号分隔字符串:

SELECT
  key_value,
  list_agg(DISTINCT FlatColumn1, ',') AS flattened_col1,
  list_agg(DISTINCT FlatColumn2, ',') AS flattened_col2,
  list_agg(DISTINCT FlatColumn3, ',') AS flattened_col3
FROM your_table
GROUP BY key_value;

为什么原来的方法会丢数据

  1. 没有指定GROUP BY key_value时,array_agg会基于全局或默认窗口聚合,导致同一个key_value对应多行不同的聚合结果;
  2. 用row_number()去重时,只会保留其中一行,其他行的有效聚合值就被丢弃了。

注意事项

  • 确保GROUP BY子句包含所有非聚合列(这里就是key_value),保证每个分组的聚合逻辑正确;
  • list_agg的第二个参数是分隔符,可根据需求替换为其他字符(如分号);
  • 若不需要去重,去掉DISTINCT关键字即可。

内容的提问来源于stack exchange,提问作者Ischade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:32:09