데이터 가져오기
데이터 가져오기 (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)
- 연결 가능한 전체 데이터 소스와 그 밖의 방법은 데이터 소스 개요에서 확인하세요.