데이터 가져오기

데이터 가져오기 (Importing Data)

데이터베이스 시스템을 쓰는 첫걸음은 데이터를 넣는 일이에요. DuckDB는 다양한 인기 데이터 소스에 직접 연결할 수 있고, 데이터를 쉽고 효율적으로 채워 넣을 수 있는 여러 수집(ingestion) 방법을 제공해요. 이 페이지에서는 그 방법들을 한눈에 정리해서, 어떤 상황에 무엇이 맞는지 고를 수 있게 도와드릴게요.

출처: 공식문서

INSERT 구문

INSERT 구문은 데이터베이스에 데이터를 넣는 표준적인 방법이에요. 빠른 프로토타이핑에는 잘 맞지만, 행마다 오버헤드가 커서 대량 적재(bulk loading)에는 피하는 게 좋아요.

INSERT INTO people VALUES (1, 'Mark');

더 자세한 설명은 INSERT 구문 문서를 참고하세요.

파일 로딩: 상대 경로

상대 경로가 어느 "루트 디렉토리"를 기준으로 확장될지는 file_search_path 설정으로 정해요. file_search_path를 설정하지 않으면 **작업 디렉토리(working directory)**가 상대 경로의 기준이 돼요.

파일 형식

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';

불러온 데이터로 테이블을 만들려면 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 가상 컬럼을 지원해요.

COPY (FROM (VALUES (42), (43)) t(x)) TO 'test.parquet';
SELECT *, filename FROM 'test.parquet';

Appender

C, C++, Go, Java, Rust 등 여러 API에서는 대량 데이터 로딩을 위한 대안으로 Appender를 쓸 수 있어요. 이 클래스는 SQL 구문을 거치지 않고도 데이터베이스에 행을 효율적으로 추가할 수 있게 해줘요.

더 알아보기 (Learn more)