如何扩展ClickHouse查询以返回多行不同随机数数组?
扩展ClickHouse查询以返回多行随机值数组
需求
需要扩展现有ClickHouse查询,让结果返回多行,每行包含一个不同的随机值数组。
现有查询代码
with base as ( -- 生成0到49的随机数,将10个值组成数组 select groupArray(10)(rand()%50) as values -- 生成10行数据 from numbers(10) ) select values, arrayMax(base.values) from base
当前查询结果
当前查询仅返回1行结果:一行包含10个0-49随机数的数组,以及该数组的最大值。
修改后的查询方案
以下两种方案均可实现返回多行独立随机数组的需求:
方案1:直接生成多行独立数组
通过arrayMap为每行生成独立的随机数组,可灵活指定行数和每行数组的元素个数:
select arrayMap(_ -> rand() % 50, numbers(10)) as values, -- 每行生成10个0-49的随机数 arrayMax(values) as max_value from numbers(5) -- 控制返回的总行数,这里设为5行
方案2:分组生成数组
通过分组将批量生成的随机数拆分为多个数组,适合需要基于数据量控制的场景:
select groupArray(rand() % 50) as values, arrayMax(values) as max_value from numbers(5 * 10) -- 总行数 = 目标行数 × 每行数组元素数 group by intDiv(number, 10) -- 每10个随机数分为一组,对应一行结果
关键说明
- 方案1中,
numbers(10)决定每行数组的元素数量,numbers(5)决定最终返回的总行数,每行数组的随机值都是独立生成的。 - 方案2通过
intDiv进行分组,确保每组对应一个数组,适合需要从批量数据中拆分数组的场景。
内容的提问来源于stack exchange,提问作者Tom Weisner
相关产品推荐
相关产品推荐

