카테고리:

데이터 생성 함수

RANDOM

각 호출은 의사 난수 64비트 정수를 반환합니다.

구문

RANDOM([seed])
Copy

인자

선택 사항:

seed

시드는 정수입니다. 다른 시드로 인해 RANDOM은 다른 출력 값을 생성합니다.

시드가 제공되지 않으면 플랫폼별 방식으로 임의의 시드가 선택됩니다.

사용법 노트

  • SQL 문이 각 행에 대해 동일한 시드를 사용하여 RANDOM을 호출하는 경우, RANDOM은 시드가 동일하더라도 각 행에 대해 다른 값을 반환합니다.

  • SQL 문이 동일한 행 에 대해 동일한 시드 를 사용하여 RANDOM을 두 번 이상 호출하는 경우, RANDOM은 해당 행에 대한 각 호출에 대해 동일 값을 반환합니다. 예를 들어, 다음은 각 행에 대해 동일 값을 두 번 반환합니다. select random(42), random(42) from table1.

    아래 를 참조하십시오.

  • RANDOM을 호출하는 문이 두 번 이상 실행되는 경우, RANDOM이 매번 동일한 값 세트를 생성한다는 보장은 없습니다. 이는 시드를 지정하는지 여부와 관계없이 참입니다.

    동일한 데이터로 동일한 문이 호출되더라도 RANDOM은 다른 값을 생성할 수 있습니다. 예를 들어, 이는 다음과 같은 경우에 발생할 수 있습니다.

    • 작업자 스레드의 수가 다릅니다.

    • 행은 다른 순서로 처리됩니다.

  • 임의의 값이 반드시 고유한 값인 것은 아닙니다. 적은 수의 호출에서는 중복이 드물지만, 호출 수가 많을수록 중복 가능성이 높아집니다. 고유한 값이 필요한 경우 RANDOM을 호출하는 대신 시퀀스(SEQ1 / SEQ2 / SEQ4 / SEQ8)를 사용하는 것이 좋습니다. 래핑할 가능성이 거의 없는 충분한 비트가 있는 시퀀스를 선택하십시오.

  • 출력은 유한 정수이고, 값은 실제로 무작위인 것이 아니라 알고리즘에 의해 생성되기 때문에 함수는 결국 “래핑”하고 값 시퀀스를 반복하기 시작합니다. 그러나 “기간”(래핑 전 호출 수)은 2^19937 - 1로 매우 큽니다.

  • 출력은 의사 난수입니다. 충분한 정보(알고리즘 및 시드 포함)가 주어지면 출력을 예측할 수 있습니다.

  • RANDOM은 MT19937-64로 알려진 64비트 Mersenne 트위스터 알고리즘을 구현합니다.

  • 의사 난수를 생성하는 것은 계산적으로 다소 비용이 많이 듭니다. 이 함수에 대한 많은 수의 호출은 상당한 리소스를 소모할 수 있습니다.

다음 예는 RANDOM 함수 사용 방법을 보여줍니다. 아래 출력에 표시된 값은 이러한 예를 직접 실행할 때 반환된 값과 다를 수 있습니다.

다음 예는 시드 없이 RANDOM을 호출합니다. 각 행의 출력은 다릅니다.

SELECT random() FROM table(generator(rowCount => 3));

+----------------------+
|             RANDOM() |
|----------------------|
|  -962378740685764490 |
|  2115408279841266588 |
| -3473099493125344079 |
+----------------------+
Copy

다음 예는 각 행에 대해 동일한 시드를 사용하여 RANDOM을 호출합니다. 시드가 일정하더라도 각 행의 출력은 여전히 다릅니다.

SELECT random(4711) FROM table(generator(rowCount => 3));
+----------------------+
|         RANDOM(4711) |
|----------------------|
| -3581185414942383166 |
|  1570543588041465562 |
| -6684111782596764647 |
+----------------------+
Copy

다음 예는 단일 문 내에서 RANDOM을 여러 번 호출하고 시드를 사용하지 않습니다. RANDOM은 각 행 내에서 서로 다른 값을 반환할 뿐만 아니라, 서로 다른 행에 대해 서로 다른 값을 반환합니다.

SELECT random(), random() FROM table(generator(rowCount => 3));

+----------------------+----------------------+
|             RANDOM() |             RANDOM() |
|----------------------+----------------------|
|  3150854865719208303 | -5331309978450480587 |
| -8117961043441270292 |   738998101727879972 |
|  6683692108700370630 |  7526520486590420231 |
+----------------------+----------------------+
Copy

다음 예는 단일 문 내에서 RANDOM을 여러 번 호출하고 이러한 각 호출에 대해 동일 시드를 사용합니다. RANDOM은 각 행 내에서 동일 값을 반환하되, 행마다 다른 값을 반환합니다.

SELECT random(4711), random(4711) FROM table(generator(rowCount => 3));
+----------------------+----------------------+
|         RANDOM(4711) |         RANDOM(4711) |
|----------------------+----------------------|
| -3581185414942383166 | -3581185414942383166 |
|  1570543588041465562 |  1570543588041465562 |
| -6684111782596764647 | -6684111782596764647 |
+----------------------+----------------------+
Copy