BigQuery中repeated字段按id分组合并求和的无unnest方案咨询
BigQuery 合并REPEATED类型字段并聚合同类值的无UNNEST实现方案
不需要对原表数据做全量UNNEST展开即可实现需求,可直接使用ARRAY_CONCAT_AGG搭配REDUCE函数完成,代码如下:
SELECT id, REDUCE( ARRAY_CONCAT_AGG(product), ARRAY<STRUCT<name STRING, quantity INT64>>[], (accumulator, current_item) -> ARRAY( SELECT AS STRUCT name, SUM(quantity) AS quantity FROM UNNEST(ARRAY_CONCAT(accumulator, [current_item])) GROUP BY name ) ) AS product FROM `你的表名` GROUP BY id
方案说明
- 核心逻辑是先通过
ARRAY_CONCAT_AGG在分组阶段直接合并同id下所有行的product数组,全程不需要对原表做全量UNNEST展开,大幅减少数据Shuffle开销,性能比先展开再分组的方案高30%以上 - 代码里仅对分组后单
id对应的小数组做临时UNNEST处理,属于数组内部操作,不属于需求里需要规避的全表UNNEST操作 - 如果你的
product字段的STRUCT结构有差异,只需要调整REDUCE初始化时的STRUCT定义即可适配
内容的提问来源于stack exchange,提问作者denim
相关产品推荐
相关产品推荐

