Functions for generating random numbers¶
These functions generate various types of random numbers and strings.
When an optional argument is provided to a random function, its primary purpose is to ensure that multiple calls to the same random function within a single row of a query produce distinct random values, preventing common subexpression elimination.
The random numbers generated by these functions use non-cryptographic algorithms. They are suitable for simulations and general data generation but should not be used for security-sensitive applications.
rand¶
Generates a random 32-bit unsigned integer with a uniform distribution.
Alias: rand32
Syntax¶
rand()
Arguments¶
None.
Returns¶
A random UInt32 number.
Example¶
SELECT rand()
Result:
┌─rand()─────┐
│ 1569354847 │
└────────────┘
rand64¶
Generates a random 64-bit unsigned integer with a uniform distribution.
Syntax¶
rand64()
Arguments¶
None.
Returns¶
A random UInt64 number.
Example¶
SELECT rand64()
Result:
┌──────────rand64()─┐
│ 15030268859237645412 │
└────────────────────┘
randCanonical¶
Generates a random floating-point number between 0 (inclusive) and 1 (exclusive).
Syntax¶
randCanonical()
Arguments¶
None.
Returns¶
A random Float64 value.
Example¶
SELECT randCanonical()
Result:
┌─randCanonical()─┐
│ 0.3452178901234567 │
└─────────────────┘
randConstant¶
Generates a single random 32-bit unsigned integer that remains constant across all rows in the result set of a query. An optional argument can be provided, but the output value will still be constant for the entire query execution.
Syntax¶
randConstant([x])
Arguments¶
x(Optional): An expression that can influence the generated random value. The resulting value will still be constant for all rows in the current query execution.
Returns¶
A UInt32 column where every row contains the same random value.
Example¶
SELECT randConstant() AS random_value
Result:
┌─random_value─┐
│ 1234567890 │
└──────────────┘
randUniform¶
Generates a random floating-point number uniformly distributed within a specified range.
Syntax¶
randUniform(min, max)
Arguments¶
min:Float64. The lower bound of the desired range (inclusive).max:Float64. The upper bound of the desired range (inclusive).
Returns¶
A random Float64 number within the specified range.
Example¶
SELECT randUniform(5.5, 10) FROM numbers(3)
Result:
┌─randUniform(5.5, 10)─┐
│ 8.094978491443102 │
│ 7.3181248914450885 │
│ 7.177741903868262 │
└──────────────────────┘
randNormal¶
Generates a random floating-point number from a normal (Gaussian) distribution.
Syntax¶
randNormal(mean, variance)
Arguments¶
mean:Float64. The mean (average) of the distribution.variance:Float64. The variance of the distribution.
Returns¶
A random Float64 number.
Example¶
SELECT randNormal(10, 2) FROM numbers(3)
Result:
┌──randNormal(10, 2)─┐
│ 13.389228911709653 │
│ 8.622949707401295 │
│ 10.801887062682981 │
└────────────────────┘
randLogNormal¶
Generates a random floating-point number from a log-normal distribution.
Syntax¶
randLogNormal(mean, variance)
Arguments¶
mean:Float64. The mean of the underlying normal distribution.variance:Float64. The variance of the underlying normal distribution.
Returns¶
A random Float64 number.
Example¶
SELECT randLogNormal(100, 5) FROM numbers(3)
Result:
┌─randLogNormal(100, 5)─┐
│ 1.295699673937363e48 │
│ 9.719869109186684e39 │
│ 6.110868203189557e42 │
└───────────────────────┘
randBinomial¶
Generates a random unsigned 64-bit integer from a binomial distribution, representing the number of successes in a series of independent experiments.
Syntax¶
randBinomial(experiments, probability)
Arguments¶
experiments:UInt64. The total number of trials or experiments.probability:Float64. The probability of success for each individual experiment, a value between 0 and 1.
Returns¶
A random UInt64 number.
Example¶
SELECT randBinomial(100, .75) FROM numbers(3)
Result:
┌─randBinomial(100, 0.75)─┐
│ 74 │
│ 78 │
│ 76 │
└─────────────────────────┘
randNegativeBinomial¶
Generates a random unsigned 64-bit integer from a negative binomial distribution, representing the number of failures before a specified number of successes.
Syntax¶
randNegativeBinomial(experiments, probability)
Arguments¶
experiments:UInt64. The number of successes to achieve.probability:Float64. The probability of failure in each individual experiment, a value between 0 and 1.
Returns¶
A random UInt64 number.
Example¶
SELECT randNegativeBinomial(100, .75) FROM numbers(3)
Result:
┌─randNegativeBinomial(100, 0.75)─┐
│ 33 │
│ 32 │
│ 39 │
└─────────────────────────────────┘
randPoisson¶
Generates a random unsigned 64-bit integer from a Poisson distribution, representing the number of events occurring in a fixed interval of time or space.
Syntax¶
randPoisson(n)
Arguments¶
n:UInt64. The average number of events (lambda) expected in the interval.
Returns¶
A random UInt64 number.
Example¶
SELECT randPoisson(10) FROM numbers(3)
Result:
┌─randPoisson(10)─┐
│ 8 │
│ 8 │
│ 7 │
└─────────────────┘
randBernoulli¶
Generates a random unsigned 64-bit integer (0 or 1) from a Bernoulli distribution, representing the outcome of a single trial with a given probability of success.
Syntax¶
randBernoulli(probability)
Arguments¶
probability:Float64. The probability of success (returning 1), a value between 0 and 1.
Returns¶
A random UInt64 number (0 or 1).
Example¶
SELECT randBernoulli(.75) FROM numbers(3)
Result:
┌─randBernoulli(0.75)─┐
│ 1 │
│ 1 │
│ 0 │
└─────────────────────┘
randExponential¶
Generates a random floating-point number from an exponential distribution, often used to model the time until an event occurs.
Syntax¶
randExponential(lambda)
Arguments¶
lambda:Float64. The rate parameter (λ) of the exponential distribution.
Returns¶
A random Float64 number.
Example¶
SELECT randExponential(1/10) FROM numbers(3)
Result:
┌─randExponential(divide(1, 10))─┐
│ 44.71628934340778 │
│ 4.211013337903262 │
│ 10.809402553207766 │
└────────────────────────────────┘
randChiSquared¶
Generates a random floating-point number from a Chi-squared distribution.
Syntax¶
randChiSquared(degree_of_freedom)
Arguments¶
degree_of_freedom:Float64. The degrees of freedom for the distribution.
Returns¶
A random Float64 number.
Example¶
SELECT randChiSquared(10) FROM numbers(3)
Result:
┌─randChiSquared(10)─┐
│ 10.015463656521543 │
│ 9.621799919882768 │
│ 2.71785015634699 │
└────────────────────┘
randStudentT¶
Generates a random floating-point number from a Student's t-distribution.
Syntax¶
randStudentT(degree_of_freedom)
Arguments¶
degree_of_freedom:Float64. The degrees of freedom for the distribution.
Returns¶
A random Float64 number.
Example¶
SELECT randStudentT(10) FROM numbers(3)
Result:
┌─────randStudentT(10)─┐
│ 1.2217309938538725 │
│ 1.7941971681200541 │
│ -0.28192176076784664 │
└──────────────────────┘
randFisherF¶
Generates a random floating-point number from an F-distribution (Fisher-Snedecor distribution).
Syntax¶
randFisherF(d1, d2)
Arguments¶
d1:Float64. The first degree of freedom.d2:Float64. The second degree of freedom.
Returns¶
A random Float64 number.
Example¶
SELECT randFisherF(10, 3) FROM numbers(3)
Result:
┌──randFisherF(10, 3)─┐
│ 7.286287504216609 │
│ 0.26590779413050386 │
│ 0.22207610901168987 │
└─────────────────────┘
randomString¶
Generates a string of a specified length, filled with random bytes. The resulting string may contain non-printable characters.
Syntax¶
randomString(length)
Arguments¶
length:UInt64. The desired length of the string in bytes. Must be a positive integer.
Returns¶
A String filled with random bytes.
Example¶
SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical
Result:
Row 1:
──────
str: 3 G : pT ?w тi k aV f6
len: 30
Row 2:
──────
str: 9 ,] ^ ) ]?? 8
len: 30
randomFixedString¶
Generates a FixedString of a specified length, filled with random bytes. The resulting string may contain non-printable characters.
Syntax¶
randomFixedString(length)
Arguments¶
length:UInt64. The desired length of theFixedStringin bytes.
Returns¶
A FixedString filled with random bytes.
Example¶
SELECT randomFixedString(13) as rnd, toTypeName(rnd)
Result:
┌─rnd──────┬─toTypeName(randomFixedString(13))─┐
│ j▒h㋖HɨZ'▒ │ FixedString(13) │
└──────────┴───────────────────────────────────┘
randomPrintableASCII¶
Generates a string of a specified length containing only random printable ASCII characters.
Syntax¶
randomPrintableASCII(length)
Arguments¶
length:UInt64. The desired length of the string in bytes. Must be a positive integer.
Returns¶
A String containing random printable ASCII characters.
Example¶
SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3
Result:
┌─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¶
Generates a random string of a specified length, ensuring the result contains valid UTF-8 code points.
Syntax¶
randomStringUTF8(length)
Arguments¶
length:UInt64. The desired length of the string in code points.
Returns¶
A String containing random UTF-8 characters.
Example¶
SELECT randomStringUTF8(13)
Result:
┌─randomStringUTF8(13)─┐
│ 𘤗д兠庇 │
└──────────────────────┘
fuzzBits¶
Flips bits in a given string (String or FixedString) with a specified probability for each bit.
Syntax¶
fuzzBits(s, prob)
Arguments¶
s:StringorFixedString. The input string whose bits will be fuzzed.prob:Float32orFloat64. The probability (between 0.0 and 1.0) that any individual bit in the string will be flipped.
Returns¶
A string of the same type as s with some bits potentially flipped.
Example¶
SELECT fuzzBits(materialize('abacaba'), 0.1) FROM numbers(3)
Result:
┌─fuzzBits(materialize('abacaba'), 0.1)─┐
│ abaaaja │
│ a*cjab+ │
│ aeca2A │
└───────────────────────────────────────┘