BigQuery如何从拼接数组中取前5个元素?ARRAY_CONCAT_AGG的LIMIT为何无效
问题原因
你对ARRAY_CONCAT_AGG函数的LIMIT参数作用存在理解偏差:
- 该函数的
LIMIT参数限制的是聚合过程中参与拼接的输入数组的行数,而非拼接完成后最终数组的元素总个数。 - 你的示例子查询总共只有2行输入,小于设置的LIMIT值5,因此所有输入数组都完整参与了拼接,不会触发截断,最终返回拼接后的完整数组。
正确实现方案
如果需要提取拼接后数组的前5个元素,需先完成全量数组拼接,再通过ARRAY_SLICE函数执行截取操作,参考代码如下:
SELECT id, ARRAY_SLICE(ARRAY_CONCAT_AGG(a), 0, 5) AS first_5_elements FROM ( SELECT 1 as id, ARRAY [6,7,8,9] a UNION ALL SELECT 1, ARRAY [2,3,4,5] ) GROUP BY 1
ARRAY_SLICE的第二个参数为截取起始下标(BigQuery数组下标从0开始),第三个参数为截取的元素数量,填入5即可得到拼接后数组的前5个元素,示例执行结果为[6,7,8,9,2]。
内容的提问来源于stack exchange,提问作者Timogavk
相关产品推荐
相关产品推荐

