Parquet 가져오기

Parquet 가져오기 (Parquet Import)

Parquet 파일에서 데이터를 읽으려면 쿼리의 FROM 절에 read_parquet 함수를 사용해요. 표준 CSV보다 훨씬 효율적인 형식이라 큰 데이터를 다룰 때 특히 유용하죠.

출처: DuckDB 공식 문서 — parquet-import

Parquet 파일 읽기

Parquet 파일에서 데이터를 읽으려면 쿼리의 FROM 절에 read_parquet 함수를 사용해요.

SELECT * FROM read_parquet('input.parquet');

함수 생략하고 읽기

혹은 read_parquet 함수를 생략하고, DuckDB가 확장자에서 알아서 판단하게 할 수도 있어요.

SELECT * FROM 'input.parquet';

새 테이블 만들기

쿼리 결과로 새 테이블을 만들려면 CREATE TABLE ... AS SELECT을 사용해요.

CREATE TABLE new_tbl AS
    SELECT * FROM read_parquet('input.parquet');

기존 테이블에 로드하기

쿼리 결과를 기존 테이블에 넣으려면 SELECT 문에서 INSERT INTO를 사용해요.

INSERT INTO tbl
    SELECT * FROM read_parquet('input.parquet');

COPY 문 사용하기

또는 COPY 문으로 Parquet 파일의 데이터를 기존 테이블에 넣을 수도 있어요.

COPY tbl FROM 'input.parquet' (FORMAT parquet);

스키마를 즉석에서 조정하기 (Adjusting the Schema on the Fly)

Parquet 파일을 조금 다른 스키마(예: 컬럼 수가 다르거나, 더 유연한 타입)로 로드하고 싶을 때 쓸 수 있는 트릭이 있어요.

c1c2 두 개의 컬럼을 가진 Parquet 파일이 있다고 가정해 봐요.

COPY (FROM (VALUES (42, 43)) t(c1, c2))
TO 'f.parquet';

파일에 없는 c3 컬럼을 추가하려면 다음을 실행해요.

FROM (VALUES (NULL::VARCHAR, NULL, NULL)) t(c1, c2, c3)
WHERE false
UNION ALL BY NAME
FROM 'f.parquet';

첫 번째 FROM 절은 c1VARCHAR세 개 컬럼을 가진 빈 테이블을 만들어요. 그런 다음 UNION ALL BY NAME으로 Parquet 파일을 합치죠. 결과는 다음과 같아요.

┌─────────┬───────┬───────┐
│   c1    │  c2   │  c3   │
│ varchar │ int32 │ int32 │
├─────────┼───────┼───────┤
│ 42      │  43   │ NULL  │
└─────────┴───────┴───────┘

추가 옵션들은 Parquet 로딩 레퍼런스를 참고하세요.

더 알아보기 (Learn more)