Перейти к основному содержимому
Перейти к основному содержимому

Функции для генерации случайных чисел

Все функции в этом разделе принимают ноль или один аргумент. Единственное использование аргумента (если он предоставлен) заключается в предотвращении устранения общих подвыражений, так что два разных выполнения одной и той же случайной функции в строке возвращают разные случайные значения.

Связанный контент

примечание

Случайные числа генерируются с помощью некриптографических алгоритмов.

rand

Возвращает случайное число UInt32 с равномерным распределением.

Использует линейный конгруэнтный генератор с начальными состоянием, полученным из системы, что означает, что, хотя он и кажется случайным, на самом деле он не является таковым и может быть предсказуем, если начальное состояние известно. Для сценариев, где истинная случайность имеет решающее значение, рассмотрите возможность использования альтернативных методов, таких как системные вызовы или интеграция с внешними библиотеками.

Синтаксис

rand()

Псевдоним: rand32

Аргументы

Нет.

Возвращаемое значение

Возвращает число типа UInt32.

Пример

SELECT rand();
1569354847 -- Note: The actual output will be a random number, not the specific number shown in the example

rand64

Возвращает случайное целое число UInt64.

Синтаксис

rand64()

Аргументы

Нет.

Возвращаемое значение

Возвращает число UInt64 с равномерным распределением.

Использует линейный конгруэнтный генератор с начальными состоянием, полученным из системы, что означает, что, хотя он и кажется случайным, на самом деле он не является таковым и может быть предсказуем, если начальное состояние известно. Для сценариев, где истинная случайность имеет решающее значение, рассмотрите возможность использования альтернативных методов, таких как системные вызовы или интеграция с внешними библиотеками.

Пример

SELECT rand64();
15030268859237645412 -- Note: The actual output will be a random number, not the specific number shown in the example.

randCanonical

Возвращает случайное число Float64.

Синтаксис

randCanonical()

Аргументы

Нет.

Возвращаемое значение

Возвращает значение Float64 между 0 (включительно) и 1 (исключительно).

Пример

SELECT randCanonical();
0.3452178901234567 - Note: The actual output will be a random Float64 number between 0 and 1, not the specific number shown in the example.

randConstant

Генерирует единственную постоянную колонку, заполненную случайным значением. В отличие от rand, эта функция гарантирует, что одно и то же случайное значение появляется в каждой строке сгенерированной колонки, что делает её полезной для сценариев, требующих постоянного случайного начального состояния для строк в одном запросе.

Синтаксис

randConstant([x]);

Аргументы

  • [x] (Необязательно): Необязательное выражение, которое влияет на сгенерированное случайное значение. Даже если оно предоставлено, полученное значение все равно будет постоянным в рамках одного выполнения запроса. Разные запросы, использующие одно и то же выражение, скорее всего, будут генерировать разные постоянные значения.

Возвращаемое значение

Возвращает колонку типа UInt32, содержащую одно и то же случайное значение в каждой строке.

Подробности реализации

Фактический вывод будет различаться для каждого выполнения запроса, даже с тем же необязательным выражением. Необязательный параметр может незначительно изменить сгенерированное значение по сравнению с использованием только randConstant.

Пример

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

randUniform

Возвращает случайное число Float64, равномерно взятое из интервала [min, max].

Синтаксис

randUniform(min, max)

Аргументы

  • min - Float64 - левая граница диапазона,
  • max - Float64 - правая граница диапазона.

Возвращаемое значение

Случайное число типа Float64.

Пример

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

randNormal

Возвращает случайное число Float64, взятое из нормального распределения.

Синтаксис

randNormal(mean, stddev)

Аргументы

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randNormal(10, 2) FROM numbers(5)

Результат:

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

randLogNormal

Возвращает случайное число Float64, взятое из лог-нормального распределения.

Синтаксис

randLogNormal(mean, stddev)

Аргументы

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randLogNormal(100, 5) FROM numbers(5)

Результат:

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

randBinomial

Возвращает случайное число UInt64, взятое из биномиального распределения.

Синтаксис

randBinomial(experiments, probability)

Аргументы

  • experiments - UInt64 - количество экспериментов,
  • probability - Float64 - вероятность успеха в каждом эксперименте, значение от 0 до 1.

Возвращаемое значение

  • Случайное число. UInt64.

Пример

SELECT randBinomial(100, .75) FROM numbers(5)

Результат:

┌─randBinomial(100, 0.75)─┐
│                      74 │
│                      78 │
│                      76 │
│                      77 │
│                      80 │
└─────────────────────────┘

randNegativeBinomial

Возвращает случайное число UInt64, взятое из отрицательного биномиального распределения.

Синтаксис

randNegativeBinomial(experiments, probability)

Аргументы

  • experiments - UInt64 - количество экспериментов,
  • probability - Float64 - вероятность неудачи в каждом эксперименте, значение от 0 до 1.

Возвращаемое значение

  • Случайное число. UInt64.

Пример

SELECT randNegativeBinomial(100, .75) FROM numbers(5)

Результат:

┌─randNegativeBinomial(100, 0.75)─┐
│                              33 │
│                              32 │
│                              39 │
│                              40 │
│                              50 │
└─────────────────────────────────┘

randPoisson

Возвращает случайное число UInt64, взятое из распределения Пуассона.

Синтаксис

randPoisson(n)

Аргументы

  • n - UInt64 - среднее число появлений.

Возвращаемое значение

  • Случайное число. UInt64.

Пример

SELECT randPoisson(10) FROM numbers(5)

Результат:

┌─randPoisson(10)─┐
│               8 │
│               8 │
│               7 │
│              10 │
│               6 │
└─────────────────┘

randBernoulli

Возвращает случайное число UInt64, взятое из распределения Бернулли.

Синтаксис

randBernoulli(probability)

Аргументы

  • probability - Float64 - вероятность успеха, значение от 0 до 1.

Возвращаемое значение

  • Случайное число. UInt64.

Пример

SELECT randBernoulli(.75) FROM numbers(5)

Результат:

┌─randBernoulli(0.75)─┐
│                   1 │
│                   1 │
│                   0 │
│                   1 │
│                   1 │
└─────────────────────┘

randExponential

Возвращает случайное число Float64, взятое из экспоненциального распределения.

Синтаксис

randExponential(lambda)

Аргументы

  • lambda - Float64 - значение лямбда.

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randExponential(1/10) FROM numbers(5)

Результат:

┌─randExponential(divide(1, 10))─┐
│              44.71628934340778 │
│              4.211013337903262 │
│             10.809402553207766 │
│              15.63959406553284 │
│             1.8148392319860158 │
└────────────────────────────────┘

randChiSquared

Возвращает случайное число Float64, взятое из распределения хи-квадрат - распределения суммы квадратов k независимых стандартных нормальных случайных величин.

Синтаксис

randChiSquared(degree_of_freedom)

Аргументы

  • degree_of_freedom - Float64 - степень свободы.

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randChiSquared(10) FROM numbers(5)

Результат:

┌─randChiSquared(10)─┐
│ 10.015463656521543 │
│  9.621799919882768 │
│   2.71785015634699 │
│ 11.128188665931908 │
│  4.902063104425469 │
└────────────────────┘

randStudentT

Возвращает случайное число Float64, взятое из t-распределения Стьюдента.

Синтаксис

randStudentT(degree_of_freedom)

Аргументы

  • degree_of_freedom - Float64 - степень свободы.

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randStudentT(10) FROM numbers(5)

Результат:

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

randFisherF

Возвращает случайное число Float64, взятое из F-распределения.

Синтаксис

randFisherF(d1, d2)

Аргументы

  • d1 - Float64 - степень свободы d1 в X = (S1 / d1) / (S2 / d2),
  • d2 - Float64 - степень свободы d2 в X = (S1 / d1) / (S2 / d2).

Возвращаемое значение

  • Случайное число. Float64.

Пример

SELECT randFisherF(10, 3) FROM numbers(5)

Результат:

┌──randFisherF(10, 3)─┐
│   7.286287504216609 │
│ 0.26590779413050386 │
│ 0.22207610901168987 │
│  0.7953362728449572 │
│ 0.19278885985221572 │
└─────────────────────┘

randomString

Генерирует строку заданной длины, заполненную случайными байтами (включая нулевые байты). Не все символы могут быть печатными.

Синтаксис

randomString(length)

Аргументы

  • length — Длина строки в байтах. Положительное целое число.

Возвращаемое значение

  • Строка, заполненная случайными байтами. String.

Пример

Запрос:

SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical;

Результат:

Row 1:
──────
str: 3 G  :   pT ?w тi  k aV f6
len: 30

Row 2:
──────
str: 9 ,]    ^   )  ]??  8
len: 30

randomFixedString

Генерирует двоичную строку заданной длины, заполненную случайными байтами (включая нулевые байты). Не все символы могут быть печатными.

Синтаксис

randomFixedString(length);

Аргументы

  • length — Длина строки в байтах. UInt64.

Возвращаемое значение

  • Строка, заполненная случайными байтами. FixedString.

Пример

Запрос:

SELECT randomFixedString(13) AS rnd, toTypeName(rnd)

Результат:

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

randomPrintableASCII

Генерирует строку со случайным набором ASCII символов. Все символы печатные. Если вы передадите length < 0, поведение функции будет неопределенным.

Синтаксис

randomPrintableASCII(length)

Аргументы

  • length — Длина строки в байтах. Положительное целое число.

Возвращаемое значение

  • Строка с случайным набором печатных 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 │ /"+<"wUTh:=LjJ Vm!c&hI*m#XTfzz │                               30 │
└────────┴────────────────────────────────┴──────────────────────────────────┘

randomStringUTF8

Генерирует случайную строку заданной длины. Результирующая строка содержит допустимые кодовые точки UTF-8. Значение кодовых точек может находиться за пределами диапазона назначенного Юникода.

Синтаксис

randomStringUTF8(length);

Аргументы

  • length — Длина строки в кодовых точках. UInt64.

Возвращаемое значение

  • Случайная строка UTF-8. String.

Пример

Запрос:

SELECT randomStringUTF8(13)

Результат:

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

fuzzBits

Синтаксис

Переворачивает биты строки или фиксированной строки s, каждый с вероятностью prob.

Синтаксис

fuzzBits(s, prob)

Аргументы

  • s - String или FixedString,
  • prob - константа Float32/64 между 0.0 и 1.0.

Возвращаемое значение

Искаженная строка с тем же типом, что и s.

Пример

SELECT fuzzBits(materialize('abacaba'), 0.1)
FROM numbers(3)

Результат:

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