DataGen SQL 커넥터
DataGen SQL 커넥터 (DataGen SQL Connector)
스캔 소스: 유한(Bounded) / 무한(UnBounded)
DataGen 커넥터는 인메모리 데이터 생성에 기반한 테이블을 만들 수 있게 해줍니다. Kafka 같은 외부 시스템에 접근하지 않고 로컬에서 쿼리를 개발할 때 유용합니다. 테이블은 계산된 컬럼(Computed Column) 문법을 포함할 수 있어 유연한 레코드 생성을 지원합니다.
DataGen 커넥터는 내장(built-in)되어 있어 추가 의존성이 필요하지 않습니다.
출처: 문서
본문
사용법 (Usage)
기본적으로 DataGen 테이블은 각 컬럼에 무작위 값을 갖는 무한 개수의 행을 만듭니다. 또한 총 행 수를 지정하면 유한 테이블을 만들 수 있습니다.
DataGen 커넥터는 정의된 스키마에 부합하는 데이터를 생성할 수 있습니다. 길이 제약이 있는 필드는 다음과 같이 처리됩니다:
- 고정 길이 데이터 타입 (char/binary): 필드 길이는 스키마로만 정의할 수 있으며 커스터마이징을 지원하지 않습니다.
- 가변 길이 데이터 타입 (varchar/varbinary): 필드 길이는 처음에 스키마로 정의되며, 커스터마이즈한 길이는 스키마 정의보다 클 수 없습니다.
- 초장(超長) 필드 (string/bytes): 기본 길이는 100이며, 2^31보다 작은 길이로 설정할 수 있습니다.
또한 사용자가 시작값과 끝값의 시퀀스를 지정하는 시퀀스 생성기도 있습니다. 테이블의 어떤 컬럼이든 시퀀스 타입이면 테이블은 유한해지고 첫 번째 시퀀스가 완료되면 끝납니다.
시간 타입은 항상 로컬 머신의 현재 시스템 시간입니다.
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3)
) WITH (
'connector' = 'datagen'
)
종종 데이터 생성 커넥터는 실제 물리 테이블을 목(mock) 처리하기 위해 LIKE 절과 함께 사용됩니다.
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3)
) WITH (...)
-- create a bounded mock table
CREATE TEMPORARY TABLE GenOrders
WITH (
'connector' = 'datagen',
'number-of-rows' = '10'
)
LIKE Orders (EXCLUDING ALL)
또한 가변 크기 타입(varchar/string/varbinary/bytes)의 경우 가변 길이 데이터 생성을 활성화할지 지정할 수 있습니다.
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3),
seller VARCHAR(150)
) WITH (
'connector' = 'datagen',
'fields.seller.var-len' = 'true'
)
컬렉션의 경우 서로 다른 크기의 컬렉션을 지정할 수 있습니다.
CREATE TABLE Orders (
f0 Array<INT>,
f1 Map<INT, STRING>,
f2 MULTISET<INT>
) WITH (
'connector' = 'datagen',
'fields.f0.length' = '10',
'fields.f1.length' = '11',
'fields.f2.length' = '12'
);
타입 (Types)
| 타입 | 지원 생성기 | 비고 |
|---|---|---|
| BOOLEAN | random | |
| CHAR | random / sequence | |
| VARCHAR | random / sequence | |
| BINARY | random / sequence | |
| VARBINARY | random / sequence | |
| STRING | random / sequence | |
| DECIMAL | random / sequence | |
| TINYINT | random / sequence | |
| SMALLINT | random / sequence | |
| INT | random / sequence | |
| BIGINT | random / sequence | |
| FLOAT | random / sequence | |
| DOUBLE | random / sequence | |
| DATE | random | 항상 로컬 머신의 현재 날짜로 결정됩니다. |
| TIME | random | 항상 로컬 머신의 현재 시간으로 결정됩니다. |
| TIMESTAMP | random | 로컬 머신의 현재 타임스탬프를 기준으로 과거 타임스탬프를 결정합니다. 최대 과거는 'max-past' 옵션으로 지정할 수 있습니다. |
| TIMESTAMP_LTZ | random | 로컬 머신의 현재 타임스탬프를 기준으로 과거 타임스탬프를 결정합니다. 최대 과거는 'max-past' 옵션으로 지정할 수 있습니다. |
| INTERVAL YEAR TO MONTH | random | |
| INTERVAL DAY TO MONTH | random | |
| ROW | random | 무작위 하위 필드를 가진 행을 생성합니다. |
| ARRAY | random | 무작위 항목을 가진 배열을 생성합니다. |
| MAP | random | 무작위 항목을 가진 맵을 생성합니다. |
| MULTISET | random | 무작위 항목을 가진 멀티셋을 생성합니다. |
커넥터 옵션 (Connector Options)
| 옵션 | 필수 | 기본값 | 타입 | 설명 |
|---|---|---|---|---|
| connector | required | (none) | String | 사용할 커넥터를 지정합니다. 여기서는 'datagen'이어야 합니다. |
| rows-per-second | optional | 10000 | Long | 발행 속도를 제어하기 위한 초당 행 수입니다. |
| number-of-rows | optional | (none) | Long | 발행할 총 행 수입니다. 기본적으로 테이블은 무한(unbounded)입니다. |
| scan.parallelism | optional | (none) | Integer | 소스의 병렬도를 정의합니다. 설정하지 않으면 전역 기본 병렬도가 사용됩니다. |
| fields.#.kind | optional | random | String | 이 '#' 필드의 생성기입니다. 'sequence' 또는 'random'일 수 있습니다. |
| fields.#.min | optional | (타입의 최솟값) | (필드 타입) | 무작위 생성기의 최솟값으로, 숫자 타입에만 동작합니다. |
| fields.#.max | optional | (타입의 최댓값) | (필드 타입) | 무작위 생성기의 최댓값으로, 숫자 타입에만 동작합니다. |
| fields.#.max-past | optional | 0 | Duration | 타임스탬프 무작위 생성기의 최대 과거 값으로, 타임스탬프 타입에만 동작합니다. |
| fields.#.length | optional | string/bytes는 100, array/map/multiset은 3 | Integer | varchar/varbinary/string/bytes/array/map/multiset 타입을 생성하기 위한 컬렉션의 크기 또는 길이입니다. 가변 길이 필드(varchar/varbinary)의 기본 길이는 스키마로 정의되며, 그보다 크게 설정할 수 없습니다. 초장 필드(string/bytes)의 기본 길이는 100이며 2^31보다 작게 설정할 수 있습니다. 구성된 필드(array/map/multiset)의 기본 요소 수는 3입니다. |
| fields.#.var-len | optional | false | Boolean | 가변 길이 데이터를 생성할지 여부로, 가변 길이 타입(varchar, string, varbinary, bytes)에만 동작합니다. |
| fields.#.start | optional | (none) | (필드 타입) | 시퀀스 생성기의 시작값입니다. |
| fields.#.end | optional | (none) | (필드 타입) | 시퀀스 생성기의 끝값입니다. |
| fields.#.null-rate | optional | 0 | (필드 타입) | null 값의 비율입니다. |