ClickHouse/docs/ja/sql-reference/functions/random-functions.md
2024-11-18 11:58:58 +09:00

731 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
slug: /ja/sql-reference/functions/random-functions
sidebar_position: 145
sidebar_label: ランダム数
---
# ランダム数生成関数
このセクションのすべての関数は、0または1つの引数を受け付けます。引数が提供された場合、その唯一の使用目的は、同じランダム関数の行内での異なる実行に異なるランダム値を返すように、[共通部分式の除去](../../sql-reference/functions/index.md#common-subexpression-elimination)を防ぐことです。
関連コンテンツ
- ブログ: [ClickHouseでのランダムデータ生成](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse)
:::note
ランダム数は暗号化を目的としないアルゴリズムによって生成されます。
:::
## rand
均等な分布でランダムなUInt32の数値を返します。
線形合同法生成器を使用し、システムから取得した初期状態を用います。これは、ランダムに見えますが、実際には初期状態が知られている場合には予測可能であることを意味します。真にランダムであることが重要なシナリオでは、システムレベルの呼び出しや外部ライブラリとの統合などの代替手法を検討してください。
**構文**
```sql
rand()
```
別名: `rand32`
**引数**
なし。
**戻り値**
UInt32型の数値を返します。
**例**
```sql
SELECT rand();
```
```response
1569354847 -- 注意: 実際の出力はこの例に示された特定の数値ではなく、ランダムな数値になります
```
## rand64
ランダムなUInt64の整数UInt64を返します。
**構文**
```sql
rand64()
```
**引数**
なし。
**戻り値**
均等な分布でのランダムなUInt64の数値。
線形合同法生成器を使用し、システムから取得した初期状態を用います。これは、ランダムに見えますが、実際には初期状態が知られている場合には予測可能であることを意味します。真にランダムであることが重要なシナリオでは、システムレベルの呼び出しや外部ライブラリとの統合などの代替手法を検討してください。
**例**
```sql
SELECT rand64();
```
```response
15030268859237645412 -- 注意: 実際の出力はこの例に示された特定の数値ではなく、ランダムな数値になります。
```
## randCanonical
ランダムなFloat64の数値を返します。
**構文**
```sql
randCanonical()
```
**引数**
なし。
**戻り値**
0含むと1含まないとの間のFloat64の値を返します。
**例**
```sql
SELECT randCanonical();
```
```response
0.3452178901234567 - 注意: 実際の出力はこの例に示された特定の数値ではなく、0と1の間のランダムなFloat64の数値になります。
```
## randConstant
単一のランダムな値で満たされた一定のカラムを生成します。`rand`と異なり、この関数は生成されたカラムの各行に同じランダム値を表示します。単一のクエリ内の行に対して一貫したランダムなシードが必要なシナリオで有用です。
**構文**
```sql
randConstant([x]);
```
**引数**
- **[x] (オプション):** 生成されたランダム値に影響を与えるオプションの式です。与えられても、結果の値は同じクエリ実行内で一定のままです。同じ式を使用する異なるクエリでは、異なる一定値が生成される可能性があります。
**戻り値**
各行に同じランダム値を含むUInt32型のカラムを返します。
**実装の詳細**
オプションの式が同じ場合でも、実際の出力はクエリの実行ごとに異なります。このオプションのパラメーターは、`randConstant`を単独で使用するのと比較して生成された値に大きな変更を加えるわけではありません。
**例**
```sql
SELECT randConstant() AS random_value;
```
```response
| random_value |
|--------------|
| 1234567890 |
```
```sql
SELECT randConstant(10) AS random_value;
```
```response
| random_value |
|--------------|
| 9876543210 |
```
## randUniform
[`min`, `max`]の範囲から均等に引かれたランダムなFloat64を返します。
**構文**
```sql
randUniform(min, max)
```
**引数**
- `min` - `Float64` - 範囲の左境界,
- `max` - `Float64` - 範囲の右境界.
**戻り値**
[Float64](../data-types/float.md)型のランダムな数値。
**例**
```sql
SELECT randUniform(5.5, 10) FROM numbers(5)
```
```response
┌─randUniform(5.5, 10)─┐
│ 8.094978491443102 │
│ 7.3181248914450885 │
│ 7.177741903868262 │
│ 6.483347380953762 │
│ 6.122286382885112 │
└──────────────────────┘
```
## randNormal
[正規分布](https://en.wikipedia.org/wiki/Normal_distribution)から引かれたランダムなFloat64を返します。
**構文**
```sql
randNormal(mean, variance)
```
**引数**
- `mean` - `Float64` - 分布の平均,
- `variance` - `Float64` - 分布の[分散](https://en.wikipedia.org/wiki/Variance)。
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randNormal(10, 2) FROM numbers(5)
```
結果:
```result
┌──randNormal(10, 2)─┐
│ 13.389228911709653 │
│ 8.622949707401295 │
│ 10.801887062682981 │
│ 4.5220192605895315 │
│ 10.901239123982567 │
└────────────────────┘
```
## randLogNormal
[対数正規分布](https://en.wikipedia.org/wiki/Log-normal_distribution)から引かれたランダムなFloat64を返します。
**構文**
```sql
randLogNormal(mean, variance)
```
**引数**
- `mean` - `Float64` - 分布の平均,
- `variance` - `Float64` - 分布の[分散](https://en.wikipedia.org/wiki/Variance)。
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randLogNormal(100, 5) FROM numbers(5)
```
結果:
```result
┌─randLogNormal(100, 5)─┐
│ 1.295699673937363e48 │
│ 9.719869109186684e39 │
│ 6.110868203189557e42 │
│ 9.912675872925529e39 │
│ 2.3564708490552458e42 │
└───────────────────────┘
```
## randBinomial
[二項分布](https://en.wikipedia.org/wiki/Binomial_distribution)から引かれたランダムなUInt64を返します。
**構文**
```sql
randBinomial(experiments, probability)
```
**引数**
- `experiments` - `UInt64` - 実験の回数,
- `probability` - `Float64` - 各実験における成功の確率, 0から1の間の値。
**戻り値**
- ランダム数。[UInt64](../data-types/int-uint.md)。
**例**
```sql
SELECT randBinomial(100, .75) FROM numbers(5)
```
結果:
```result
┌─randBinomial(100, 0.75)─┐
│ 74 │
│ 78 │
│ 76 │
│ 77 │
│ 80 │
└─────────────────────────┘
```
## randNegativeBinomial
[負の二項分布](https://en.wikipedia.org/wiki/Negative_binomial_distribution)から引かれたランダムなUInt64を返します。
**構文**
```sql
randNegativeBinomial(experiments, probability)
```
**引数**
- `experiments` - `UInt64` - 実験の回数,
- `probability` - `Float64` - 各実験における失敗の確率, 0から1の間の値。
**戻り値**
- ランダム数。[UInt64](../data-types/int-uint.md)。
**例**
```sql
SELECT randNegativeBinomial(100, .75) FROM numbers(5)
```
結果:
```result
┌─randNegativeBinomial(100, 0.75)─┐
│ 33 │
│ 32 │
│ 39 │
│ 40 │
│ 50 │
└─────────────────────────────────┘
```
## randPoisson
[ポアソン分布](https://en.wikipedia.org/wiki/Poisson_distribution)から引かれたランダムなUInt64を返します。
**構文**
```sql
randPoisson(n)
```
**引数**
- `n` - `UInt64` - 発生の平均数。
**戻り値**
- ランダム数。[UInt64](../data-types/int-uint.md)。
**例**
```sql
SELECT randPoisson(10) FROM numbers(5)
```
結果:
```result
┌─randPoisson(10)─┐
│ 8 │
│ 8 │
│ 7 │
│ 10 │
│ 6 │
└─────────────────┘
```
## randBernoulli
[ベルヌーイ分布](https://en.wikipedia.org/wiki/Bernoulli_distribution)から引かれたランダムなUInt64を返します。
**構文**
```sql
randBernoulli(probability)
```
**引数**
- `probability` - `Float64` - 成功の確率、0から1の間の値。
**戻り値**
- ランダム数。[UInt64](../data-types/int-uint.md)。
**例**
```sql
SELECT randBernoulli(.75) FROM numbers(5)
```
結果:
```result
┌─randBernoulli(0.75)─┐
│ 1 │
│ 1 │
│ 0 │
│ 1 │
│ 1 │
└─────────────────────┘
```
## randExponential
[指数分布](https://en.wikipedia.org/wiki/Exponential_distribution)から引かれたランダムなFloat64を返します。
**構文**
```sql
randExponential(lambda)
```
**引数**
- `lambda` - `Float64` - ラムダ値。
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randExponential(1/10) FROM numbers(5)
```
結果:
```result
┌─randExponential(divide(1, 10))─┐
│ 44.71628934340778 │
│ 4.211013337903262 │
│ 10.809402553207766 │
│ 15.63959406553284 │
│ 1.8148392319860158 │
└────────────────────────────────┘
```
## randChiSquared
[カイ二乗分布](https://en.wikipedia.org/wiki/Chi-squared_distribution)から引かれたランダムなFloat64を返します。この分布は、`k`個の独立した標準正規乱数変数の平方和の分布です。
**構文**
```sql
randChiSquared(degree_of_freedom)
```
**引数**
- `degree_of_freedom` - `Float64` - 自由度。
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randChiSquared(10) FROM numbers(5)
```
結果:
```result
┌─randChiSquared(10)─┐
│ 10.015463656521543 │
│ 9.621799919882768 │
│ 2.71785015634699 │
│ 11.128188665931908 │
│ 4.902063104425469 │
└────────────────────┘
```
## randStudentT
[スチューデントのt分布](https://en.wikipedia.org/wiki/Student%27s_t-distribution)から引かれたランダムなFloat64を返します。
**構文**
```sql
randStudentT(degree_of_freedom)
```
**引数**
- `degree_of_freedom` - `Float64` - 自由度。
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randStudentT(10) FROM numbers(5)
```
結果:
```result
┌─────randStudentT(10)─┐
│ 1.2217309938538725 │
│ 1.7941971681200541 │
│ -0.28192176076784664 │
│ 0.2508897721303792 │
│ -2.7858432909761186 │
└──────────────────────┘
```
## randFisherF
[F分布](https://en.wikipedia.org/wiki/F-distribution)から引かれたランダムなFloat64を返します。
**構文**
```sql
randFisherF(d1, d2)
```
**引数**
- `d1` - `Float64` - `X = (S1 / d1) / (S2 / d2)`におけるd1の自由度,
- `d2` - `Float64` - `X = (S1 / d1) / (S2 / d2)`におけるd2の自由度,
**戻り値**
- ランダム数。[Float64](../data-types/float.md)。
**例**
```sql
SELECT randFisherF(10, 3) FROM numbers(5)
```
結果:
```result
┌──randFisherF(10, 3)─┐
│ 7.286287504216609 │
│ 0.26590779413050386 │
│ 0.22207610901168987 │
│ 0.7953362728449572 │
│ 0.19278885985221572 │
└─────────────────────┘
```
## randomString {#randomString}
指定された長さのランダムなバイト(ゼロバイトを含む)で満たされた文字列を生成します。すべての文字が印刷可能であるとは限りません。
**構文**
```sql
randomString(length)
```
**引数**
- `length` — 文字列のバイト長。正の整数。
**戻り値**
- ランダムなバイトで満たされた文字列。[String](../data-types/string.md)。
**例**
クエリ:
```sql
SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical;
```
結果:
```text
Row 1:
──────
str: 3 G : pT ?w тi k aV f6
len: 30
Row 2:
──────
str: 9 ,] ^ ) ]?? 8
len: 30
```
## randomFixedString
指定された長さのランダムなバイト(ゼロバイトを含む)で満たされたバイナリ文字列を生成します。すべての文字が印刷可能であるとは限りません。
**構文**
```sql
randomFixedString(length);
```
**引数**
- `length` — 文字列のバイト長。[UInt64](../data-types/int-uint.md)。
**戻り値**
- ランダムなバイトで満たされた文字列。[FixedString](../data-types/fixedstring.md)。
**例**
クエリ:
```sql
SELECT randomFixedString(13) as rnd, toTypeName(rnd)
```
結果:
```text
┌─rnd──────┬─toTypeName(randomFixedString(13))─┐
│ j▒h㋖HɨZ'▒ │ FixedString(13) │
└──────────┴───────────────────────────────────┘
```
## randomPrintableASCII
ランダムな[ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters)文字の集合を持つ文字列を生成します。すべての文字が印刷可能です。
`length < 0`を渡すと、この関数の動作は未定義です。
**構文**
```sql
randomPrintableASCII(length)
```
**引数**
- `length` — 文字列のバイト長。正の整数。
**戻り値**
- ランダムな[ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters)印刷可能文字の集合を持つ文字列。[String](../data-types/string.md)
**例**
```sql
SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3
```
```text
┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐
│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │
│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │
│ 2 │ /"+<"wUTh:=LjJ Vm!c&hI*m#XTfzz │ 30 │
└────────┴────────────────────────────────┴──────────────────────────────────┘
```
## randomStringUTF8
指定された長さのランダムな文字列を生成します。結果の文字列は有効なUTF-8コードポイントを含みます。コードポイントの値は、Unicodeに割り当てられている範囲外である可能性があります。
**構文**
```sql
randomStringUTF8(length);
```
**引数**
- `length` — コードポイントでの文字列の長さ。[UInt64](../data-types/int-uint.md)。
**戻り値**
- UTF-8のランダム文字列。[String](../data-types/string.md)。
**例**
クエリ:
```sql
SELECT randomStringUTF8(13)
```
結果:
```text
┌─randomStringUTF8(13)─┐
│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛 │
└──────────────────────┘
```
## fuzzBits {#fuzzBits}
**構文**
StringまたはFixedString `s`のビットをひっくり返します。それぞれのビットは確率`prob`で変更されます。
**構文**
```sql
fuzzBits(s, prob)
```
**引数**
- `s` - `String`または`FixedString`,
- `prob` - 0.0から1.0の間の定数`Float32/64`。
**戻り値**
`同タイプの` s`と同じタイプのファズされた文字列。
**例**
```sql
SELECT fuzzBits(materialize('abacaba'), 0.1)
FROM numbers(3)
```
結果:
```result
┌─fuzzBits(materialize('abacaba'), 0.1)─┐
│ abaaaja │
│ a*cjab+ │
│ aeca2A │
└───────────────────────────────────────┘
```