跳转到主要内容
在测试新用例或进行实现基准测试时,生成随机数据非常有用。 ClickHouse 提供了丰富的随机数据生成函数,在很多情况下,无需使用外部数据生成器。 本指南提供了多个示例,介绍如何在 ClickHouse 中根据不同的随机性需求生成随机数据集。

简单均匀分布数据集

用例:快速生成一个包含随机时间戳和事件类型的用户事件数据集。
  • rand() % 10000:1 万用户的均匀分布
  • arrayElement(...):随机选择三种事件类型中的一种
  • 时间戳分布在前 24 小时内

指数分布

适用场景:模拟购买金额,其中大多数值较低,只有少数值较高。
  • 最近一段时间内均匀分布的时间戳
  • randExponential(1/10) — 大多数值接近 0,最小偏移量为 15 ([ClickHouse][1]、[ClickHouse][2]、[Atlantic.Net][3]、[GitHub][4])

按时间分布的事件 (泊松)

用例:模拟在特定时间段内集中到达的事件 (例如高峰时段) 。
  • 事件在中午前后达到峰值,并呈现泊松分布的波动

时变正态分布

适用场景:模拟随时间变化的系统指标 (例如 CPU 使用率) 。
  • usage 呈现昼夜周期性的正弦波变化 + 随机性
  • 值限定在 [0,100] 范围内

分类数据与嵌套数据

用例:创建具有多个兴趣标签的用户画像。
  • 随机数组长度在 1–3 之间
  • 每种兴趣对应每位用户的三个评分
阅读 在 ClickHouse 中生成随机数据 博客,了解更多示例。

生成随机表

generateRandomStructure 函数与 generateRandom 表引擎结合使用时尤其有用,可用于测试、基准测试,或创建具有任意 schema 的模拟数据。 先来看看使用 generateRandomStructure 函数生成的随机结构是什么样的:
你可能会看到类似下面这样的内容:
你也可以使用种子,以便每次都获得相同的结构:
现在我们来创建一个实际的表,并用随机数据填充它:
把这两个函数结合起来,生成一个完全随机的表。 先看看会得到什么结构:
现在按该结构创建表,并使用 DESCRIBE 语句查看创建结果:
查看第一行中的生成数据示例:
最后修改于 2026年7月2日