メインコンテンツへスキップ
メインコンテンツへスキップ

乱数を生成する関数

このセクションのすべての関数は、引数を 0 個または 1 個だけ取ります。引数(指定された場合)の唯一の用途は、common subexpression elimination を防ぎ、同じ行内で同じ乱数関数を 2 回評価した場合でも、異なる乱数値が返されるようにすることです。

関連コンテンツ

注記

乱数は暗号用途を想定していないアルゴリズムによって生成されます。

注記

以下のドキュメントは、system.functions システムテーブルから生成されています。

fuzzBits

導入バージョン: v20.5.0

入力文字列 s の各ビットを、確率 p で反転させます。

構文

fuzzBits(s, p)

引数

  • s — ビットのファジングを行う対象の String または FixedStringString または FixedString
  • p — 各ビットを反転させる確率を表す 0.0 から 1.0 の数値。Float*

戻り値

s と同じ型のファジングされた文字列を返します。String または FixedString

使用例

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 — 省略可能で、指定しても無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われないようにすることです。Any

返り値

UInt32 型の乱数を返します。UInt32

使用例

SELECT rand();
1569354847

rand64

導入バージョン: v1.1.0

一様分布に従うランダムな UInt64 型の値を返します。

初期状態をシステムから取得した線形合同法による疑似乱数生成器を使用します。そのため見かけ上はランダムですが、真の乱数ではなく、初期状態が既知であれば予測可能です。 真のランダム性が重要となるシナリオでは、システムレベルの呼び出しや外部ライブラリとの連携など、代替手段の利用を検討してください。

構文

rand64([x])

引数

  • x — 省略可能で、指定しても無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われるのを防ぐことです。Any

戻り値

一様分布に従う UInt64 型の乱数を返します。UInt64

使用例

SELECT rand64();
15030268859237645412

randBernoulli

導入バージョン: v22.10.0

ベルヌーイ分布に従う Float64 型の乱数値を返します。

構文

randBernoulli(probability[, x])

引数

  • probability — 成功確率を表す 0 以上 1 以下の値。Float64
  • 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 — 各実験における成功確率(0 から 1 の間の値) Float64
  • x — 省略可能であり、評価も無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われるのを防ぐことです。Any

戻り値

指定された二項分布からサンプリングされたランダムな Float64 値を返します。UInt64

使用例

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

randCanonical

導入バージョン: v22.11.0

0以上1未満の一様分布に従う Float64 型の乱数を返します。

構文

randCanonical([x])

引数

  • x — 省略可能であり、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われるのを防ぐことです。Any

返される値

ランダムな Float64 型の数値を返します。Float64

使用例

SELECT randCanonical();
0.345217890123456

randChiSquared

導入バージョン: v22.10.0

カイ二乗分布に従う乱数の Float64 値を返します。

構文

randChiSquared(degree_of_freedom[, x])

引数

  • degree_of_freedom — 自由度。Float64
  • x — 省略可能で、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、common subexpression elimination が行われるのを防ぐことです。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

現在のクエリ実行内のすべての行で一定に保たれる、単一の乱数値を生成します。

この関数の動作は次のとおりです:

  • 1 回のクエリ内では、すべての行で同じ乱数値を返す
  • クエリ実行が異なれば、異なる値を生成する

データセット内のすべての行に対して、一貫した乱数シードや識別子を適用する場合に有用です。

構文

randConstant([x])

引数

  • x — 省略可能で、無視されます。クエリ内で同じ関数呼び出しが複数回使用される場合に common subexpression elimination を防ぐことが、この引数の唯一の目的です。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 — 分布のレートパラメータ、またはラムダ値。Float64
  • x — 省略可能で、評価はされますが結果は無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用されるときに、common subexpression elimination が行われるのを防ぐことです。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 — 省略可能で、評価時には無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われるのを防ぐことです。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 — 各実験における失敗確率。0 から 1 までの値。Float64
  • x — オプションの引数であり、実際には使用されません。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に common subexpression elimination が行われるのを防ぐことです。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

ポアソン分布 (Poisson distribution) に従う 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-distribution に従う乱数を Float64 型で返します。

構文

randStudentT(degree_of_freedom[, x])

引数

  • degree_of_freedom — 自由度。Float64
  • x — 省略可能で、指定しても無視されます。同じ関数呼び出しがクエリ内で複数回使用される場合に、common subexpression elimination が行われるのを防ぐことを唯一の目的とした引数です。Any

戻り値

指定されたスチューデントの 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 — 省略可能で、評価はされません。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、common subexpression elimination が行われるのを防ぐことにあります。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 — 文字列の長さ(コードポイント数)。(U)Int*

返される値

ランダムな UTF-8 コードポイントからなる文字列を返します。String

使用例

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