mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-12 01:12:12 +00:00
555 lines
12 KiB
Markdown
555 lines
12 KiB
Markdown
---
|
|
slug: /en/sql-reference/functions/random-functions
|
|
sidebar_position: 145
|
|
sidebar_label: Random Numbers
|
|
---
|
|
|
|
# Functions for Generating Random Numbers
|
|
|
|
All functions in this section accept zero or one arguments. The only use of the argument (if provided) is to prevent prevent [common subexpression
|
|
elimination](../../sql-reference/functions/index.md#common-subexpression-elimination) such that two different execution of the same random
|
|
function in a query return different random values.
|
|
|
|
Related content
|
|
- Blog: [Generating random data in ClickHouse](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse)
|
|
|
|
:::note
|
|
The random numbers are generated by non-cryptographic algorithms.
|
|
:::
|
|
|
|
## rand, rand32
|
|
|
|
Returns a random UInt32 number, evenly distributed accross the range of all possible UInt32 numbers.
|
|
|
|
Uses a linear congruential generator.
|
|
|
|
## rand64
|
|
|
|
Returns a random UInt64 number, evenly distributed accross the range of all possible UInt64 numbers.
|
|
|
|
Uses a linear congruential generator.
|
|
|
|
## randCanonical
|
|
|
|
Returns a Float64 value, evenly distributed in [0, 1).
|
|
|
|
## randConstant
|
|
|
|
Like `rand` but produces a constant column with a random value.
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT rand(), rand(1), rand(number), randConstant(), randConstant(1), randConstant(number)
|
|
FROM numbers(3)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─────rand()─┬────rand(1)─┬─rand(number)─┬─randConstant()─┬─randConstant(1)─┬─randConstant(number)─┐
|
|
│ 3047369878 │ 4132449925 │ 4044508545 │ 2740811946 │ 4229401477 │ 1924032898 │
|
|
│ 2938880146 │ 1267722397 │ 4154983056 │ 2740811946 │ 4229401477 │ 1924032898 │
|
|
│ 956619638 │ 4238287282 │ 1104342490 │ 2740811946 │ 4229401477 │ 1924032898 │
|
|
└────────────┴────────────┴──────────────┴────────────────┴─────────────────┴──────────────────────┘
|
|
```
|
|
|
|
# Functions for Generating Random Numbers based on a Distribution
|
|
|
|
## randUniform
|
|
|
|
Returns a Float64 drawn uniformly from the interval between `min` and `max` ([continuous uniform distribution](https://en.wikipedia.org/wiki/Continuous_uniform_distribution)).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randUniform(min, max)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `min` - `Float64` - min value of the range,
|
|
- `max` - `Float64` - max value of the range.
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randUniform(5.5, 10) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randUniform(5.5, 10)─┐
|
|
│ 8.094978491443102 │
|
|
│ 7.3181248914450885 │
|
|
│ 7.177741903868262 │
|
|
│ 6.483347380953762 │
|
|
│ 6.122286382885112 │
|
|
└──────────────────────┘
|
|
```
|
|
|
|
## randNormal
|
|
|
|
Returns a Float64 drawn from a [normal distribution](https://en.wikipedia.org/wiki/Normal_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randNormal(mean, variance)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `mean` - `Float64` - mean value of distribution,
|
|
- `variance` - `Float64` - [variance](https://en.wikipedia.org/wiki/Variance).
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randNormal(10, 2) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌──randNormal(10, 2)─┐
|
|
│ 13.389228911709653 │
|
|
│ 8.622949707401295 │
|
|
│ 10.801887062682981 │
|
|
│ 4.5220192605895315 │
|
|
│ 10.901239123982567 │
|
|
└────────────────────┘
|
|
```
|
|
|
|
## randLogNormal
|
|
|
|
Returns a Float64 drawn from a [log-normal distribution](https://en.wikipedia.org/wiki/Log-normal_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randLogNormal(mean, variance)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `mean` - `Float64` - mean value of distribution,
|
|
- `variance` - `Float64` - [variance](https://en.wikipedia.org/wiki/Variance).
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randLogNormal(100, 5) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randLogNormal(100, 5)─┐
|
|
│ 1.295699673937363e48 │
|
|
│ 9.719869109186684e39 │
|
|
│ 6.110868203189557e42 │
|
|
│ 9.912675872925529e39 │
|
|
│ 2.3564708490552458e42 │
|
|
└───────────────────────┘
|
|
```
|
|
|
|
## randBinomial
|
|
|
|
Returns a UInt64 drawn from a [binomial distribution](https://en.wikipedia.org/wiki/Binomial_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randBinomial(experiments, probability)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `experiments` - `UInt64` - number of experiments,
|
|
- `probability` - `Float64` - probability of success in each experiment (values in `0...1` range only).
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randBinomial(100, .75) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randBinomial(100, 0.75)─┐
|
|
│ 74 │
|
|
│ 78 │
|
|
│ 76 │
|
|
│ 77 │
|
|
│ 80 │
|
|
└─────────────────────────┘
|
|
```
|
|
|
|
## randNegativeBinomial
|
|
|
|
Returns a UInt64 drawn from a [negative binomial distribution](https://en.wikipedia.org/wiki/Negative_binomial_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randNegativeBinomial(experiments, probability)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `experiments` - `UInt64` - number of experiments,
|
|
- `probability` - `Float64` - probability of failure in each experiment (values in `0...1` range only).
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randNegativeBinomial(100, .75) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randNegativeBinomial(100, 0.75)─┐
|
|
│ 33 │
|
|
│ 32 │
|
|
│ 39 │
|
|
│ 40 │
|
|
│ 50 │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
## randPoisson
|
|
|
|
Returns a UInt64 drawn from a [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randPoisson(n)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `n` - `UInt64` - mean number of occurrences.
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randPoisson(10) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randPoisson(10)─┐
|
|
│ 8 │
|
|
│ 8 │
|
|
│ 7 │
|
|
│ 10 │
|
|
│ 6 │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## randBernoulli
|
|
|
|
Returns a UInt64 drawn from a [Bernoulli distribution](https://en.wikipedia.org/wiki/Bernoulli_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randBernoulli(probability)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `probability` - `Float64` - probability of success (values in `0...1` range only).
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randBernoulli(.75) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randBernoulli(0.75)─┐
|
|
│ 1 │
|
|
│ 1 │
|
|
│ 0 │
|
|
│ 1 │
|
|
│ 1 │
|
|
└─────────────────────┘
|
|
```
|
|
|
|
## randExponential
|
|
|
|
Returns a Float64 drawn from a [exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randExponential(lambda)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `lambda` - `Float64` - lambda value.
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randExponential(1/10) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randExponential(divide(1, 10))─┐
|
|
│ 44.71628934340778 │
|
|
│ 4.211013337903262 │
|
|
│ 10.809402553207766 │
|
|
│ 15.63959406553284 │
|
|
│ 1.8148392319860158 │
|
|
└────────────────────────────────┘
|
|
```
|
|
|
|
## randChiSquared
|
|
|
|
Returns a Float64 drawn from a [Chi-square distribution](https://en.wikipedia.org/wiki/Chi-squared_distribution) - a distribution of a sum of the squares of k independent standard normal random variables.
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randChiSquared(degree_of_freedom)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `degree_of_freedom` - `Float64` - degree of freedom.
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randChiSquared(10) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─randChiSquared(10)─┐
|
|
│ 10.015463656521543 │
|
|
│ 9.621799919882768 │
|
|
│ 2.71785015634699 │
|
|
│ 11.128188665931908 │
|
|
│ 4.902063104425469 │
|
|
└────────────────────┘
|
|
```
|
|
|
|
## randStudentT
|
|
|
|
Returns a Float64 drawn from a [Student's t-distribution](https://en.wikipedia.org/wiki/Student%27s_t-distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randStudentT(degree_of_freedom)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `degree_of_freedom` - `Float64` - degree of freedom.
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randStudentT(10) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─────randStudentT(10)─┐
|
|
│ 1.2217309938538725 │
|
|
│ 1.7941971681200541 │
|
|
│ -0.28192176076784664 │
|
|
│ 0.2508897721303792 │
|
|
│ -2.7858432909761186 │
|
|
└──────────────────────┘
|
|
```
|
|
|
|
## randFisherF
|
|
|
|
Returns a Float64 drawn from a [F-distribution](https://en.wikipedia.org/wiki/F-distribution).
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
randFisherF(d1, d2)
|
|
```
|
|
|
|
**Arguments**
|
|
|
|
- `d1` - `Float64` - d1 degree of freedom in `X = (S1 / d1) / (S2 / d2)`,
|
|
- `d2` - `Float64` - d2 degree of freedom in `X = (S1 / d1) / (S2 / d2)`,
|
|
|
|
**Returned value**
|
|
|
|
- Random number.
|
|
|
|
Type: [Float64](/docs/en/sql-reference/data-types/float.md).
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT randFisherF(10, 3) FROM numbers(5)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌──randFisherF(10, 3)─┐
|
|
│ 7.286287504216609 │
|
|
│ 0.26590779413050386 │
|
|
│ 0.22207610901168987 │
|
|
│ 0.7953362728449572 │
|
|
│ 0.19278885985221572 │
|
|
└─────────────────────┘
|
|
```
|
|
|
|
# Functions for Generating Random Strings
|
|
|
|
## randomString
|
|
|
|
Returns a random String of specified `length`. Not all characters may be printable.
|
|
|
|
**Syntax**
|
|
|
|
```sql
|
|
randomString(length)
|
|
```
|
|
|
|
## randomFixedString
|
|
|
|
Like `randomString` but returns a FixedString.
|
|
|
|
## randomPrintableASCII
|
|
|
|
Returns a random String of specified `length`. All characters are printable.
|
|
|
|
**Syntax**
|
|
|
|
```sql
|
|
randomPrintableASCII(length)
|
|
```
|
|
|
|
## randomStringUTF8
|
|
|
|
Returns a random String containing `length` many UTF8 codepoints. Not all characters may be printable
|
|
|
|
**Syntax**
|
|
|
|
```sql
|
|
randomStringUTF8(length)
|
|
```
|
|
|
|
## fuzzBits
|
|
|
|
**Syntax**
|
|
|
|
Inverts the bits of String or FixedString `s`, each with probability `prob`.
|
|
|
|
**Syntax**
|
|
|
|
``` sql
|
|
fuzzBits(s, prob)
|
|
```
|
|
|
|
**Arguments**
|
|
- `s` - `String` or `FixedString`
|
|
- `prob` - constant `Float32/64`
|
|
|
|
**Returned value**
|
|
|
|
Fuzzed string with same type as `s`.
|
|
|
|
**Example**
|
|
|
|
``` sql
|
|
SELECT fuzzBits(materialize('abacaba'), 0.1)
|
|
FROM numbers(3)
|
|
```
|
|
|
|
Result:
|
|
|
|
``` result
|
|
┌─fuzzBits(materialize('abacaba'), 0.1)─┐
|
|
│ abaaaja │
|
|
│ a*cjab+ │
|
|
│ aeca2A │
|
|
└───────────────────────────────────────┘
|
|
```
|