- 카테고리:
RANDOM¶
각 호출은 의사 난수 64비트 정수를 반환합니다.
구문¶
RANDOM([seed])
인자¶
선택 사항:
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 | +----------------------+
다음 예는 각 행에 대해 동일한 시드를 사용하여 RANDOM을 호출합니다. 시드가 일정하더라도 각 행의 출력은 여전히 다릅니다.
SELECT random(4711) FROM table(generator(rowCount => 3)); +----------------------+ | RANDOM(4711) | |----------------------| | -3581185414942383166 | | 1570543588041465562 | | -6684111782596764647 | +----------------------+
다음 예는 단일 문 내에서 RANDOM을 여러 번 호출하고 시드를 사용하지 않습니다. RANDOM은 각 행 내에서 서로 다른 값을 반환할 뿐만 아니라, 서로 다른 행에 대해 서로 다른 값을 반환합니다.
SELECT random(), random() FROM table(generator(rowCount => 3)); +----------------------+----------------------+ | RANDOM() | RANDOM() | |----------------------+----------------------| | 3150854865719208303 | -5331309978450480587 | | -8117961043441270292 | 738998101727879972 | | 6683692108700370630 | 7526520486590420231 | +----------------------+----------------------+
다음 예는 단일 문 내에서 RANDOM을 여러 번 호출하고 이러한 각 호출에 대해 동일 시드를 사용합니다. RANDOM은 각 행 내에서 동일 값을 반환하되, 행마다 다른 값을 반환합니다.
SELECT random(4711), random(4711) FROM table(generator(rowCount => 3)); +----------------------+----------------------+ | RANDOM(4711) | RANDOM(4711) | |----------------------+----------------------| | -3581185414942383166 | -3581185414942383166 | | 1570543588041465562 | 1570543588041465562 | | -6684111782596764647 | -6684111782596764647 | +----------------------+----------------------+