BigQuery多数组表中指定数组字段重复元素删除方法咨询
BigQuery数组字段去重实现方案
核心逻辑为仅对目标订单的Item数组做去重处理,Shipment等其余字段完全保留原值,无需修改表结构或拆分重组全表数据。
1. 先查询验证去重效果
先执行以下SELECT语句确认输出结果符合预期,避免误改数据:
SELECT `Order`, -- Order是SQL保留字,用反引号包裹避免报错 ARRAY( SELECT AS STRUCT * EXCEPT(row_id) FROM ( SELECT item.*, ROW_NUMBER() OVER( PARTITION BY item.Sku, item.Quantity, item.Price ORDER BY item.Sku ) AS row_id FROM UNNEST(Item) AS item ) WHERE row_id = 1 ) AS Item, Shipment -- 完全保留原Shipment数组内容 FROM Order_Table -- 可加 WHERE `Order` = 123 仅查看目标订单的处理效果
2. 验证后更新原表
确认查询结果符合要求后,执行以下UPDATE语句直接修改原表,仅处理订单123,其余订单完全不受影响:
UPDATE Order_Table SET Item = ARRAY( SELECT AS STRUCT * EXCEPT(row_id) FROM ( SELECT item.*, ROW_NUMBER() OVER( PARTITION BY item.Sku, item.Quantity, item.Price ORDER BY item.Sku ) AS row_id FROM UNNEST(Item) AS item ) WHERE row_id = 1 ) WHERE `Order` = 123 -- 仅处理目标订单,其余订单数据无任何改动
处理逻辑说明:
- 将每行的Item数组拆解为独立元素后,按Sku、Quantity、Price三个字段分组打行号,仅保留每组第一个元素,再重新拼装为数组回写Item字段
- 整个过程不会修改Shipment等其他字段的内容,也不会影响其他订单的数据
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

