Faker 커넥터

Faker 커넥터 (Faker connector)

Faker 커넥터는 정의된 구조에 맞는 무작위 데이터를 생성해요. Datafaker 라이브러리를 사용해 생성된 데이터를 더 현실적으로 만들어 줘요.

출처: 문서

본문

이 커넥터를 사용하면 고정된 가져온 데이터셋 없이 SQL 쿼리를 테스트·학습하거나, 다른 데이터 소스를 크고 현실적인 테스트 데이터로 채울 수 있어요. 이는 데이터를 처리하는 애플리케이션(Trino 자체 포함)의 성능과, 데이터에 접근하는 애플리케이션 사용자 인터페이스의 테스트를 가능하게 해요.

설정 (Configuration)

connector.namefaker로 설정해 Faker 커넥터를 지정하는 카탈로그 속성 파일을 만드세요.

예를 들어 generator 카탈로그에서 데이터를 생성하려면 etc/catalog/generator.properties 파일을 만드세요.

connector.name=faker
faker.null-probability=0.1
faker.default-limit=1000
faker.locale=pl

데이터 생성 예시

Datafaker 표현식을 사용해 필드를 생성할 수 있어요:

SELECT generator.default.random_string('#{Name.first_name}');

열에 generator, min, max, allowed_values 같은 WITH 옵션을 지정할 수 있어요:

CREATE TABLE faker.default.prices (
  currency VARCHAR NOT NULL WITH (generator = '#{Currency.code}'),
  price DECIMAL(8,2) NOT NULL WITH (min = '0')
);

SELECT JSON_OBJECT(KEY currency VALUE price) AS complex
FROM faker.default.prices
LIMIT 3;
      complex
-------------------
 {"TTD":924657.82}
 {"MRO":968292.49}
 {"LTL":357773.63}
(3 rows)

기존 테이블 구조 복제

기존 테이블의 구조만 복제(스키마 복사)할 수 있어요:

CREATE TABLE generator.default.customer (LIKE production.public.customer EXCLUDING PROPERTIES);

기존 테이블 정의를 확인하려면:

SHOW CREATE TABLE production.public.customers;

복제한 구조에서 열별 제약을 직접 정의할 수도 있어요:

CREATE TABLE generator.default.customer (
  id UUID NOT NULL,
  name VARCHAR NOT NULL,
  address VARCHAR NOT NULL,
  born_at DATE WITH (min = '1900-01-01', max = '2025-01-01'),
  age_years INTEGER WITH (min = '0', max = '150'),
  group_id INTEGER WITH (allowed_values = ARRAY['10', '32', '81'])
);

생성된 데이터를 실제 테이블로 옮길 수 있어요:

INSERT INTO production.public.customers
SELECT *
FROM generator.default.customers
LIMIT 100;

문자열 필드에 현실적인 데이터 생성기(generator)를 지정하고 싶다면:

CREATE TABLE generator.default.customer (
  id UUID NOT NULL,
  name VARCHAR NOT NULL WITH (generator = '#{Name.first_name} #{Name.last_name}'),
  address VARCHAR NOT NULL WITH (generator = '#{Address.fullAddress}'),
  born_at DATE WITH (min = '1900-01-01', max = '2025-01-01'),
  age_years INTEGER WITH (min = '0', max = '150'),
  group_id INTEGER WITH (allowed_values = ARRAY['10', '32', '81'])
);

조건에 맞는 기존 데이터로 테이블을 생성할 수도 있어요:

CREATE TABLE generator.default.customer AS
SELECT *
FROM production.public.customer
WHERE created_at > CURRENT_DATE - INTERVAL '1' YEAR;

전체 테이블을 복사하거나:

CREATE TABLE generator.default.customer AS TABLE production.public.customer;

다른 카탈로그의 테이블을 복사할 수도 있어요:

CREATE TABLE generator.default.orders AS TABLE tpch.tiny.orders;

복사된 테이블의 정의를 보면 열별 범위가 자동으로 설정된 것을 확인할 수 있어요:

SHOW CREATE TABLE generator.default.orders;
CREATE TABLE generator.default.orders (
   orderkey bigint WITH (max = '60000', min = '1', null_probability = 0E0, step = '1'),
   custkey bigint WITH (allowed_values = ARRAY['153','662','1453','63','784', ..., '1493','657'], null_probability = 0E0),
   orderstatus varchar(1),
   totalprice double WITH (max = '466001.28', min = '874.89', null_probability = 0E0),
   orderdate date WITH (max = '1998-08-02', min = '1992-01-01', null_probability = 0E0),
   orderpriority varchar(15),
   clerk varchar(15),
   shippriority integer WITH (allowed_values = ARRAY['0'], null_probability = 0E0),
   comment varchar(79)
)
WITH (
   default_limit = 15000
)

더 알아보기 (Learn more)

테스트용 데이터 생성 커넥터가 궁금하다면 TPCH 커넥터 문서를 이어서 읽어 보세요.