Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
RANDOM 함수
RANDOM 함수는 0.0(포함)과 1.0(제외) 사이에서 무작위로 값을 생성합니다.
구문
RANDOM()
반환 타입
DOUBLE PRECISION
사용 노트
RANDOM 함수는 SET seed TO 값을 사용하여 시드할 수 있습니다. 시드할 때 각 컴퓨팅 슬라이스는 재현 가능한 의사 무작위 시퀀스를 생성합니다. 그러나 분산 MPP 환경에서는 어떤 슬라이스가 어떤 행을 처리할지 예측할 수 없으므로 전체 쿼리 결과가 확정적이지 않습니다. 시드 값은 각 컴퓨팅 노드의 난수 생성기에 영향을 주지만 슬라이스 간 행 분포는 다릅니다.
예제
0에서 99 사이의 무작위 값을 계산하려면 다음 예제를 사용합니다. 무작위 숫자가 0에서 1이면 이 쿼리는 0에서 100 사이의 무작위 숫자를 생성합니다.
SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 59 | +------+
다음은 RANDOM이 예측 가능한 순서로 숫자를 생성할 수 있도록 SET 명령을 사용하여 SEED 값을 설정하는 예입니다.
SEED 값을 설정하지 않고 3개의 RANDOM 정수를 반환하려면 다음 예제를 사용합니다.
SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 6 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 68 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 56 | +------+
SEED 값을 .25로 설정하고 RANDOM 숫자를 3개 더 반환하려면 다음 예제를 사용합니다.
SET SEED TO .25; SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 21 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 79 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 12 | +------+
SEED 값을 .25로 재설정하고 RANDOM이 이전 세 번의 호출과 동일한 결과를 반환하는지 확인하려면 다음 예제를 사용합니다.
SET SEED TO .25; SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 21 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 79 | +------+SELECT CAST(RANDOM() * 100 AS INT);+------+ | int4 | +------+ | 12 | +------+
다음 예제에서는 TICKIT 샘플 데이터베이스를 사용합니다. 자세한 내용은 샘플 데이터베이스 섹션을 참조하세요.
SALES 테이블에서 10개 항목의 균일한 무작위 샘플을 검색하려면 다음 예제를 사용합니다.
SELECT * FROM sales ORDER BY RANDOM() LIMIT 10;+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | 45422 | 51114 | 5983 | 24482 | 4369 | 2118 | 1 | 195 | 29.25 | 2008-10-19 05:20:07 | | 42481 | 47638 | 4573 | 6198 | 6479 | 1987 | 4 | 1140 | 171 | 2008-06-10 09:39:19 | | 31494 | 34759 | 18895 | 4719 | 7753 | 2090 | 4 | 1024 | 153.6 | 2008-09-21 03:44:26 | | 119388 | 136685 | 21815 | 41905 | 2071 | 1884 | 1 | 359 | 53.85 | 2008-02-27 10:43:10 | | 166990 | 225037 | 18529 | 7628 | 746 | 2113 | 1 | 2009 | 301.35 | 2008-10-14 10:07:44 | | 11146 | 12096 | 42685 | 6619 | 1876 | 2123 | 1 | 29 | 4.35 | 2008-10-24 06:23:54 | | 148537 | 172056 | 15102 | 11787 | 6122 | 1923 | 2 | 480 | 72 | 2008-04-07 03:58:23 | | 68945 | 78387 | 7359 | 18323 | 6636 | 1910 | 1 | 457 | 68.55 | 2008-03-25 08:31:03 | | 52796 | 59576 | 9909 | 15102 | 7958 | 1951 | 1 | 479 | 71.85 | 2008-05-05 02:25:08 | | 90684 | 103522 | 38052 | 21549 | 7384 | 2117 | 1 | 313 | 46.95 | 2008-10-18 05:43:11 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
10개 품목의 무작위 샘플을 검색하되 가격에 비례하여 품목을 선택하려면 다음 예제를 사용합니다. 예를 들어 다른 항목보다 가격이 두 배 높은 항목은 쿼리 결과에 나타날 가능성이 두 배 더 높습니다.
SELECT * FROM sales ORDER BY -LOG(RANDOM()) / pricepaid LIMIT 10;+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | 158340 | 208208 | 17082 | 42018 | 1211 | 2160 | 4 | 6852 | 1027.8 | 2008-11-30 12:21:43 | | 53250 | 60069 | 12644 | 7066 | 7942 | 1838 | 4 | 1528 | 229.2 | 2008-01-12 11:24:56 | | 22929 | 24938 | 47314 | 6503 | 179 | 2000 | 3 | 741 | 111.15 | 2008-06-23 08:04:50 | | 164980 | 221181 | 1949 | 19670 | 1471 | 1906 | 1 | 1330 | 199.5 | 2008-03-21 07:59:51 | | 159641 | 211179 | 44897 | 16652 | 7458 | 2128 | 1 | 1019 | 152.85 | 2008-10-29 02:02:15 | | 73143 | 83439 | 5716 | 5727 | 7314 | 1903 | 1 | 248 | 37.2 | 2008-03-18 11:07:42 | | 84778 | 96749 | 46608 | 32980 | 3883 | 1999 | 2 | 958 | 143.7 | 2008-06-22 12:13:31 | | 171096 | 232929 | 43683 | 8536 | 8353 | 1870 | 1 | 929 | 139.35 | 2008-02-13 01:36:36 | | 74212 | 84697 | 39809 | 15569 | 5525 | 2105 | 2 | 896 | 134.4 | 2008-10-06 11:47:50 | | 158011 | 207556 | 25399 | 16881 | 232 | 2088 | 2 | 2526 | 378.9 | 2008-09-19 06:00:26 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+