如何在Google BigQuery中创建指定长度的全1数组?
在Google BigQuery中生成指定长度的重复元素数组
当然可以实现这类需求,以下是几种实用的方法,完全满足你生成指定长度重复元素数组、展开频率表的需求:
方法一:通用型重复数组构造
这是最灵活的方案,支持任意数据类型的重复元素:
-- 生成长度为7的全1整数数组 SELECT ARRAY(SELECT 1 FROM UNNEST(GENERATE_RANGE(1, 8)) AS idx) AS ones_array; -- 生成长度为5的重复字符串数组 SELECT ARRAY(SELECT 'custom_value' FROM UNNEST(GENERATE_RANGE(1, 6)) AS idx) AS repeated_str_array;
原理:GENERATE_RANGE(1, n+1)生成包含n个元素的序列,通过子查询将每个位置替换为目标元素,最终组合成数组。
方法二:字符串元素快捷方案(可选)
如果目标元素是字符串,可通过REPEAT+SPLIT快速实现,注意处理末尾空值:
-- 生成长度为7的字符串类型全1数组 SELECT SPLIT(REPEAT('1,', 7), ',')[:-1] AS str_ones_array; -- 转为整数数组 SELECT ARRAY(SELECT CAST(item AS INT64) FROM UNNEST(SPLIT(REPEAT('1,', 7), ',')) AS item WHERE item != '') AS int_ones_array;
应用:频率表展开
针对你提到的频率表展开需求,结合UNNEST即可直接实现:
WITH frequency_table AS ( -- 模拟你的频率表数据 SELECT 'product_x' AS item, 3 AS frequency UNION ALL SELECT 'product_y' AS item, 5 AS frequency ) SELECT item FROM frequency_table, UNNEST(ARRAY(SELECT item FROM UNNEST(GENERATE_RANGE(1, frequency + 1)) AS idx)) AS expanded_item;
执行后会得到3条product_x和5条product_y的记录,完成频率表的展开。
内容的提问来源于stack exchange,提问作者DrPrettyman
相关产品推荐
相关产品推荐

