카테고리:

테이블 함수

GENERATOR

지정된 행 수, 지정된 생성 기간(초), 또는 둘 다를 기반으로 데이터 행을 만듭니다. 이 시스템 정의 테이블 함수는 가상 행 생성을 활성화합니다.

열은 0개이지만 행은 많을 수도 있는 가상 테이블을 생성할 수 있습니다. 이러한 가상 테이블은 SELECT 절이 전적으로 데이터 생성 함수로 구성된 쿼리에 유용합니다.

구문

GENERATOR( ROWCOUNT => <count> [ , TIMELIMIT => <sec> ] )

GENERATOR( [ TIMELIMIT => <sec> ] )
Copy

사용법 노트

  • countsec 은 음이 아닌 정수 상수여야 합니다.

  • ROWCOUNT 인자만 지정된 경우, 결과 테이블에는 count 행이 포함됩니다.

  • TIMELIMIT 인자만 지정된 경우, 쿼리는 sec 초 동안 실행되어, 시간 프레임 내에서 가능한 한 많은 행을 생성합니다. 정확한 행 수는 시스템 속도에 따라 달라지며 완전히 결정적이지는 않습니다.

  • ROWCOUNTTIMELIMIT 인자가 모두 지정된 경우:

    • TIMELIMIT 전에 ROWCOUNT 에 도달하면 결과 테이블에 count 행이 포함됩니다.

    • ROWCOUNT 전에 TIMELIMIT 에 도달하면 테이블에는 시간 프레임 내에 생성된 행 수가 포함됩니다. 정확한 행 수는 시스템 속도에 따라 달라지며 완전히 결정적이지는 않습니다.

  • ROWCOUNT 또는 TIMELIMIT 가 null이면 무시됩니다. 따라서 generator(ROWCOUNT => null) 은 0개의 행을 생성합니다.

  • 두 매개 변수(ROWCOUNTTIMELIMIT)가 모두 생략되면 GENERATOR 함수는 0개의 행을 반환합니다.

  • 행의 내용은 GENERATOR 함수 자체가 아니라 프로젝션 절의 함수에 의해 결정됩니다. 자세한 내용은 아래의 예 섹션을 참조하십시오. 또한, 프로젝션 절에서 사용하려는 특정 함수(예: SEQ())에 대한 설명을 참조하십시오. 모든 유효한 함수가 갭 없는 시퀀스를 생성하는 것은 아닙니다.

참고

이러한 예는 갭이 있을 수 있는 시퀀스를 생성합니다. 간격 없이 시퀀스를 생성하는 예는 SEQ1 / SEQ2 / SEQ4 / SEQ8ROW_NUMBER 섹션을 참조하십시오.

이 예에서는 GENERATOR 함수를 사용하여 10개의 행을 생성합니다. 행의 내용은 프로젝션 절의 함수에 의해 결정됩니다.

  • SEQ4() 열은 0부터 시작하는 4바이트 정수 시퀀스를 생성합니다.

  • UNIFORM(…) 열은 함수 또는 세 번째 매개 변수로서 전달된 상수를 기반으로 첫 번째 매개 변수(1)와 두 번째 매개 변수(10) 사이의 값을 생성합니다.

이 예에는 출력이 일관되도록 RANDOM() 함수에 대한 선택적 “시드”가 포함됩니다.

SELECT seq4(), uniform(1, 10, RANDOM(12)) 
  FROM TABLE(GENERATOR(ROWCOUNT => 10)) v 
  ORDER BY 1;
+--------+----------------------------+
| SEQ4() | UNIFORM(1, 10, RANDOM(12)) |
|--------+----------------------------|
|      0 |                          7 |
|      1 |                          2 |
|      2 |                          5 |
|      3 |                          9 |
|      4 |                          6 |
|      5 |                          9 |
|      6 |                          9 |
|      7 |                          5 |
|      8 |                          3 |
|      9 |                          8 |
+--------+----------------------------+
Copy

이 예는 UNIFORM 함수에 세 번째 매개 변수로서 함수가 아닌 상수를 전달한다는 점을 제외하고는 앞의 예와 유사합니다. 결과는 UNIFORM 열의 출력이 모든 행에 대해 동일하다는 것입니다.

SELECT seq4(), uniform(1, 10, 42) 
  FROM TABLE(GENERATOR(ROWCOUNT => 10)) v 
  ORDER BY 1;
+--------+--------------------+
| SEQ4() | UNIFORM(1, 10, 42) |
|--------+--------------------|
|      0 |                 10 |
|      1 |                 10 |
|      2 |                 10 |
|      3 |                 10 |
|      4 |                 10 |
|      5 |                 10 |
|      6 |                 10 |
|      7 |                 10 |
|      8 |                 10 |
|      9 |                 10 |
+--------+--------------------+
Copy

ROWCOUNTTIMELIMIT 매개 변수를 모두 생략하면 출력은 0행입니다.

SELECT seq4(), uniform(1, 10, RANDOM(12)) 
  FROM TABLE(GENERATOR()) v 
  ORDER BY 1;
+--------+----------------------------+
| SEQ4() | UNIFORM(1, 10, RANDOM(12)) |
|--------+----------------------------|
+--------+----------------------------+
Copy

다음 예에서는 ROWCOUNT 매개 변수 없이 TIMELIMIT 매개 변수를 사용합니다.

SELECT COUNT(seq4()) FROM TABLE(GENERATOR(TIMELIMIT => 10)) v;

+---------------+
| COUNT(SEQ4()) |
|---------------|
|    3615440896 |
+---------------+
Copy