跳转到主内容
跳转到主内容

用于生成随机数的函数

本节中的所有函数只接受 0 个或 1 个参数。提供参数 (如果有) 的唯一作用是用于防止公共子表达式消除,从而保证在同一行内对同一个随机函数的多次执行会返回不同的随机值。

相关内容

注意

随机数由非加密算法生成。

注意

以下文档内容是从 system.functions 系统表生成的。

fuzzBits

引入版本:v20.5.0

以概率 p 对输入字符串 s 的每一位比特执行翻转。

语法

fuzzBits(s, p)

参数

  • s — 要执行比特模糊处理的 String 或 FixedString 类型的值 StringFixedString
  • p — 每一位翻转的概率,取值为介于 0.01.0 之间的数值 Float*

返回值

返回一个经过模糊处理的字符串,其类型与 s 相同。StringFixedString

示例

用法示例

SELECT fuzzBits(materialize('abacaba'), 0.1)
FROM numbers(3)
┌─fuzzBits(materialize('abacaba'), 0.1)─┐
│ abaaaja                               │
│ a*cjab+                               │
│ aeca2A                                │
└───────────────────────────────────────┘

rand

自 v1.1.0 起提供

返回一个服从均匀分布的随机 UInt32 数值。

使用线性同余生成器,其初始状态由系统获取。这意味着虽然结果看起来是随机的,但并非真正随机,如果已知初始状态,其输出是可以被预测的。 在对真正随机性有严格要求的场景中,建议使用诸如系统级调用或集成外部库等替代方法。

语法

rand([x])

别名: rand32

参数

  • x — 可选且会被忽略。该参数的唯一作用,是在同一个查询中多次使用相同函数调用时,防止发生公共子表达式消除Any

返回值

返回一个 UInt32 类型的随机数。UInt32

示例

用法示例

SELECT rand();
1569354847

rand64

引入版本:v1.1.0

返回一个服从均匀分布的 UInt64 随机数。

使用从系统获取初始状态的线性同余发生器,这意味着虽然它看起来是随机的,但并非真正随机;如果已知初始状态,则可能被预测。 在对真正随机性要求严格的场景中,请考虑使用其他方法,例如通过系统级调用或集成外部库来生成随机数。

语法

rand64([x])

参数

  • x — 可选且会被忽略。该参数的唯一作用是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个服从均匀分布的随机 UInt64 整数。UInt64

示例

用法示例

SELECT rand64();
15030268859237645412

randBernoulli

引入版本:v22.10.0

返回一个服从 Bernoulli 分布 的随机 Float64 数值。

语法

randBernoulli(probability[, x])

参数

  • probability — 成功概率,取值范围为 01Float64
  • x — 可选且会被忽略。该参数唯一的作用是在同一查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回从指定伯努利分布中生成的随机 Float64 数值。UInt64

示例

用法示例

SELECT randBernoulli(.75) FROM numbers(5)
┌─randBernoulli(0.75)─┐
│                   1 │
│                   1 │
│                   0 │
│                   1 │
│                   1 │
└─────────────────────┘

randBinomial

自 v22.10.0 引入

返回一个从 二项分布 中抽取的随机 Float64 数值。

语法

randBinomial(experiments, probability[, x])

参数

  • experiments — 试验次数 UInt64
  • probability — 每次试验成功的概率,取值在 01 之间 Float64
  • x — 可选且会被忽略。该参数的唯一作用是在同一个函数调用在查询中被多次使用时,防止发生公共子表达式消除Any

返回值

返回一个从指定二项分布中生成的随机 Float64 数值。UInt64

示例

用法示例

SELECT randBinomial(100, .75) FROM numbers(5)
┌─randBinomial(100, 0.75)─┐
│                      74 │
│                      78 │
│                      76 │
│                      77 │
│                      80 │
└─────────────────────────┘

randCanonical

自 v22.11.0 引入

返回一个服从均匀分布的随机 Float64 浮点数,取值范围在 0 (包含) 到 1 (不包含) 之间。

语法

randCanonical([x])

参数

  • x — 可选且会被忽略。该参数唯一的作用,是在同一个查询中多次使用相同函数调用时,防止发生公共子表达式消除Any

返回值

返回一个随机的 Float64 浮点数。Float64

示例

用法示例

SELECT randCanonical();
0.345217890123456

randChiSquared

引入版本:v22.10.0

返回一个从 卡方分布 中抽取的随机 Float64 类型数值。

语法

randChiSquared(degree_of_freedom[, x])

参数

  • degree_of_freedom — 自由度。Float64
  • x — 可选且会被忽略。该参数唯一的作用,是在同一个查询中多次使用相同的函数调用时,防止公共子表达式消除Any

返回值

返回从指定卡方分布中抽取的随机 Float64 数值。Float64

示例

用法示例

SELECT randChiSquared(10) FROM numbers(5)
┌─randChiSquared(10)─┐
│ 10.015463656521543 │
│  9.621799919882768 │
│   2.71785015634699 │
│ 11.128188665931908 │
│  4.902063104425469 │
└────────────────────┘

randConstant

引入版本:v1.1.0

生成一个在当前查询执行期间对所有行都保持不变的随机值。

该函数:

  • 在单次查询执行中,为每一行返回相同的随机值
  • 在不同的查询执行中生成不同的值

适用于在数据集的所有行上应用一致的随机种子或标识符。

语法

randConstant([x])

参数

  • x — 可选且会被忽略。该参数唯一的用途是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除。类型为 Any

返回值

返回一个类型为 UInt32 的列,在每一行中都包含相同的随机值。UInt32

示例

基本用法

SELECT randConstant() AS random_value;
| random_value |
|--------------|
| 1234567890   |

带参数时的用法

SELECT randConstant(10) AS random_value;
| random_value |
|--------------|
| 9876543210   |

randExponential

自 v22.10.0 起引入

返回从指数分布中抽取的随机 Float64 数值。

语法

randExponential(lambda[, x])

参数

  • lambda — 分布的速率参数或 lambda 值。Float64
  • x — 可选参数,且会被忽略。该参数唯一的作用是在同一查询中多次使用相同的函数调用时,防止公共子表达式消除Any

返回值

返回一个从指定指数分布中抽取的随机 Float64 数值。Float64

示例

用法示例

SELECT randExponential(1/10) FROM numbers(5)
┌─randExponential(divide(1, 10))─┐
│              44.71628934340778 │
│              4.211013337903262 │
│             10.809402553207766 │
│              15.63959406553284 │
│             1.8148392319860158 │
└────────────────────────────────┘

randFisherF

引入于:v22.10.0

返回一个从 F 分布 中抽取的 Float64 类型随机数。

语法

randFisherF(d1, d2[, x])

参数

  • d1X = (S1 / d1) / (S2 / d2) 中的 d1 的自由度。Float64
  • d2X = (S1 / d1) / (S2 / d2) 中的 d2 的自由度。Float64
  • x — 可选且会被忽略。该参数唯一的用途是在同一查询中多次使用相同的函数调用时,防止发生公共子表达式消除Any

返回值

返回一个从指定 F 分布中抽取的随机 Float64 数值。Float64

示例

用法示例

SELECT randFisherF(10, 3) FROM numbers(5)
┌─randFisherF(10, 20)─┐
│  0.7204609609506184 │
│  0.9926258472572916 │
│  1.4010752726735863 │
│ 0.34928401507025556 │
│  1.8216216009473598 │
└─────────────────────┘

randLogNormal

引入于:v22.10.0

返回一个从 对数正态分布 中抽取的随机 Float64 浮点数。

语法

randLogNormal(mean, stddev[, x])

参数

  • mean — 分布的均值。Float64
  • stddev — 分布的标准差。Float64
  • x — 可选参数,会被忽略。该参数唯一目的,是在同一个查询中多次使用相同函数调用时防止公共子表达式消除Any

返回值

返回一个从指定对数正态分布中抽取的随机 Float64 数值。Float64

示例

用法示例

SELECT randLogNormal(100, 5) FROM numbers(5)
┌─randLogNormal(100, 5)─┐
│  1.295699673937363e48 │
│  9.719869109186684e39 │
│  6.110868203189557e42 │
│  9.912675872925529e39 │
│ 2.3564708490552458e42 │
└───────────────────────┘

randNegativeBinomial

自 v22.10.0 起引入

返回一个从负二项分布中抽取的随机 Float64 值。

语法

randNegativeBinomial(experiments, probability[, x])

参数

  • experiments — 实验次数。UInt64
  • probability — 每次实验失败的概率,取值范围在 01 之间。Float64
  • x — 可选且会被忽略。该参数的唯一目的,是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个从指定负二项分布中抽取的随机 Float64 数值 UInt64

示例

用法示例

SELECT randNegativeBinomial(100, .75) FROM numbers(5)
┌─randNegativeBinomial(100, 0.75)─┐
│                              33 │
│                              32 │
│                              39 │
│                              40 │
│                              50 │
└─────────────────────────────────┘

randNormal

引入于:v22.10.0

返回一个服从正态分布的随机 Float64 数值。

语法

randNormal(mean, stddev[, x])

参数

  • mean — 分布的均值 Float64
  • stddev — 分布的标准差 Float64
  • x — 可选参数,且会被忽略。该参数的唯一作用,是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个从指定正态分布中抽取的随机 Float64 数值。Float64

示例

用法示例

SELECT randNormal(10, 2) FROM numbers(5)
┌──randNormal(10, 2)─┐
│ 13.389228911709653 │
│  8.622949707401295 │
│ 10.801887062682981 │
│ 4.5220192605895315 │
│ 10.901239123982567 │
└────────────────────┘

randPoisson

引入版本:v22.10.0

返回一个服从泊松分布的随机 Float64 数值。

语法

randPoisson(n[, x])

参数

  • n — 发生次数的平均值。UInt64
  • x — 可选且会被忽略 (不参与计算) 。该参数唯一的用途是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个从指定泊松分布中生成的随机 Float64 数值。UInt64

示例

用法示例

SELECT randPoisson(10) FROM numbers(5)
┌─randPoisson(10)─┐
│               8 │
│               8 │
│               7 │
│              10 │
│               6 │
└─────────────────┘

randStudentT

引入于:v22.10.0

返回一个从 Student's t 分布 中抽取的随机 Float64 类型的数值。

语法

randStudentT(degree_of_freedom[, x])

参数

  • degree_of_freedom — 自由度。Float64
  • x — 可选且会被忽略。该参数的唯一作用是在同一个查询中多次使用相同的函数调用时,防止发生公共子表达式消除Any

返回值

返回从指定的 Student's t 分布中抽取的随机 Float64 数值。Float64

示例

使用示例

SELECT randStudentT(10) FROM numbers(5)
┌─────randStudentT(10)─┐
│   1.2217309938538725 │
│   1.7941971681200541 │
│ -0.28192176076784664 │
│   0.2508897721303792 │
│  -2.7858432909761186 │
└──────────────────────┘

randUniform

自 v22.10.0 起提供

返回一个在区间 [min,max][\min, \max] 上服从均匀分布的随机 Float64 数值。

语法

randUniform(min, max[, x])

参数

  • min — 区间左边界 (包含) 。Float64
  • max — 区间右边界 (包含) 。Float64
  • x — 可选且会被忽略。此参数的唯一用途是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个在由 minmax 形成的区间上均匀分布的随机数。Float64

示例

使用示例

SELECT randUniform(5.5, 10) FROM numbers(5)
┌─randUniform(5.5, 10)─┐
│    8.094978491443102 │
│   7.3181248914450885 │
│    7.177741903868262 │
│    6.483347380953762 │
│    6.122286382885112 │
└──────────────────────┘

randomFixedString

引入自:v20.5.0

生成一个具有指定字符个数的随机定长字符串。 返回的字符不一定是 ASCII 字符,也就是说这些字符可能不可打印。

语法

randomFixedString(length)

参数

  • length — 字符串的字节长度 (以字节为单位) 。UInt*

返回值

返回一个用随机字节填充的字符串。FixedString

示例

使用示例

SELECT randomFixedString(13) AS rnd, toTypeName(rnd)
┌─rnd──────┬─toTypeName(randomFixedString(13))─┐
│ j▒h㋖HɨZ'▒ │ FixedString(13)                 │
└──────────┴───────────────────────────────────┘

randomPrintableASCII

引入自:v20.1.0

生成一个包含指定数量字符的随机ASCII字符串。

如果传入 length < 0,则该函数的行为未定义。

语法

randomPrintableASCII(length[, x])

参数

  • length — 字符串长度 (字节数) 。(U)Int*
  • x — 可选参数,且会被忽略。该参数唯一的作用,是在同一个查询中多次使用相同函数调用时,防止公共子表达式消除Any

返回值

返回一个由随机可打印 ASCII 字符组成的字符串。String

示例

用法示例

SELECT number, randomPrintableASCII(30) AS str, length(str) FROM system.numbers LIMIT 3
┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐
│      0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │                               30 │
│      1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │                               30 │
│      2 │ /"+<"with:=LjJ Vm!c&hI*m#XTfzz │                               30 │
└────────┴────────────────────────────────┴──────────────────────────────────┘

randomString

引入版本:v20.5.0

生成具有指定长度的随机字符串。 返回的字符不一定是 ASCII 字符,即可能是不可打印字符。

语法

randomString(length[, x])

参数

  • length — 字符串的字节长度。(U)Int*
  • x — 可选参数,其值会被忽略。该参数唯一的作用是在同一个查询中多次使用相同的函数调用时,防止触发公共子表达式消除优化。Any

返回值

返回一个由随机字节填充的字符串。String

示例

用法示例

SELECT randomString(5) AS str FROM numbers(2)
���
�v6B�

randomStringUTF8

引入版本:v20.5.0

生成具有指定码点数量的随机 UTF-8 字符串。 不会返回来自未分配的平面 (第 4 到第 13 平面) 的码点。 与 ClickHouse 服务器交互的客户端仍有可能无法正确显示生成的 UTF-8 字符串。

语法

randomStringUTF8(length)

参数

  • length — 字符串的长度 (以 Unicode 码点为单位) 。(U)Int*

返回值

返回一个由随机 UTF-8 码点组成的字符串。String

示例

使用示例

SELECT randomStringUTF8(13)
┌─randomStringUTF8(13)─┐
│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛       │
└──────────────────────┘