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 값의 비율입니다.

더 알아보기 (Learn more)