ARRAY_AGG()是否保证稳定?即结果元素与输入顺序一致?
BigQuery
ARRAY_AGG() 顺序稳定性的官方说明 结论:未指定ORDER BY时,官方不保证ARRAY_AGG()的输出顺序与输入一致
你测试中观察到的顺序保留只是BigQuery执行引擎在特定场景下的表现,属于未定义行为——也就是说,这种行为没有官方承诺,当查询逻辑发生变化(比如引入分区、并行计算、数据洗牌等操作)时,执行引擎可能会改变输出数组的元素顺序。
如果需要确保数组元素的顺序符合预期,必须显式使用ORDER BY子句约束ARRAY_AGG()的排序逻辑:
比如要按元素值升序排序:
SELECT ARRAY_AGG(x ORDER BY x) AS array_agg FROM UNNEST([20, 40, 50, 1, 2, 3]) AS x;
如果要严格保留原数组的输入顺序,可以借助WITH OFFSET追踪元素位置后排序:
SELECT ARRAY_AGG(x ORDER BY offset) AS array_agg FROM UNNEST([20, 40, 50, 1, 2, 3]) AS x WITH OFFSET;
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

