데이터 로딩 (Data Loading)
데이터 로딩 (Data Loading)
데이터베이스 시스템을 쓰는 첫 단계는 그 시스템에 데이터를 넣는 일이에요. DuckDB는 다양한 인기 데이터 소스에 직접 연결할 수 있고, 데이터베이스를 쉽고 효율적으로 채울 수 있게 해주는 여러 데이터 수집 방법을 제공해요. 이 페이지에서는 그 방법들을 개요로 정리해 두었으니, 여러분의 사용 사례에 가장 잘 맞는 방법을 고르는 데 도움이 될 거예요.
INSERT 문
INSERT 문은 데이터베이스 시스템에 데이터를 로딩하는 표준적인 방법이에요. 빠른 프로토타이핑에는 어울리지만, 행 하나마다 오버헤드가 커서 대량 로딩(bulk loading)에는 피하는 게 좋아요.
INSERT INTO people VALUES ( 1 , 'Mark' );
더 자세한 설명은 INSERT 문에 대한 페이지에서 확인할 수 있어요.
파일 로딩: 상대 경로
file_search_path 구성 옵션을 사용하면 상대 경로가 어느 "루트 디렉터리"를 기준으로 확장되는지 설정할 수 있어요. file_search_path가 설정되어 있지 않으면, 상대 경로의 기준으로 작업 디렉터리를 사용해요.
파일 포맷
CSV 로딩
CSV 파일에서 데이터를 효율적으로 로딩하려면 여러 방법을 쓸 수 있어요. 가장 간단한 방법은 CSV 파일의 이름을 그대로 사용하는 거예요:
SELECT * FROM 'test.csv' ;
옵션을 함께 넘기고 싶다면 read_csv 함수를 사용하면 돼요:
SELECT * FROM read_csv ( 'test.csv' , header = false );
아니면 COPY 문을 쓸 수도 있어요:
COPY tbl FROM 'test.csv' ( HEADER false );
압축된 CSV 파일(예: gzip으로 압축된 파일)에서도 데이터를 직접 읽을 수 있어요:
SELECT * FROM 'test.csv.gz' ;
DuckDB는 로딩한 데이터로 CREATE TABLE ... AS SELECT 문을 이용해 테이블을 만들 수도 있어요:
CREATE TABLE test AS SELECT * FROM 'test.csv' ;
더 자세한 내용은 CSV 로딩에 대한 페이지에서 확인할 수 있어요.
Parquet 로딩
Parquet 파일도 파일 이름을 사용해 효율적으로 로딩하고 조회할 수 있어요:
SELECT * FROM 'test.parquet' ;
아니면 read_parquet 함수를 사용할 수도 있어요:
SELECT * FROM read_parquet ( 'test.parquet' );
혹은 COPY 문을 쓸 수도 있어요:
COPY tbl FROM 'test.parquet' ;
더 자세한 내용은 Parquet 로딩에 대한 페이지에서 확인할 수 있어요.
JSON 로딩
JSON 파일도 파일 이름을 사용해 효율적으로 로딩하고 조회할 수 있어요:
SELECT * FROM 'test.json' ;
아니면 read_json 함수를 사용할 수도 있어요:
SELECT * FROM read_json ( 'test.json' );
혹은 COPY 문을 쓸 수도 있어요:
COPY tbl FROM 'test.json' ;
더 자세한 내용은 JSON 로딩에 대한 페이지에서 확인할 수 있어요.
파일 이름 돌려받기
DuckDB v1.3.0부터 CSV, JSON, Parquet 리더는 filename 가상 열(virtual column)을 지원해요:
COPY ( FROM ( VALUES ( 42 ), ( 43 )) t ( x )) TO 'test.parquet' ; SELECT * , filename FROM 'test.parquet' ;
Appender
몇몇 API(C, C++, Go, Java, Rust)에서는 Appender를 대량 데이터 로딩의 대안으로 사용할 수 있어요. 이 클래스는 SQL 문을 사용하지 않고도 데이터베이스 시스템에 행을 효율적으로 추가하는 데 쓸 수 있어요.