본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
DuckDB 고급 활용

시작과 기준선

포지셔닝과 적합한 워크로드버전·설치·런타임 기준연결·스토리지 모델실행 가능한 예제 번들

파일·레이크 분석

CSV·JSON 수집Parquet 레이크 모델링다중 파일·스키마 진화파티션 쓰기와 오브젝트 스토리지Lakehouse 포맷

분석 SQL·연동

Friendly SQL과 매크로시계열·분석 SQL중첩·반정형 데이터Python·Arrow·Polars·BIdbt·MotherDuck·Ibis 생태계Materialization·Index·통계

성능·운영

성능 프로파일링벤치마크·프로파일링 실습메모리·spill·실패 모드동시성·보안·운영보안 Hardening 체크리스트

부록

템플릿참고 자료검증 리포트업데이트 내역
핸드북›DuckDB 고급 활용›템플릿

템플릿

DuckDB 분석 운영에 바로 복사해 쓰는 세션 설정, S3, Parquet, profiling, OOM 대응 템플릿

핵심 요약

  • 설명 대신 바로 복사해 path·region·memory·partition key만 바꿔 쓰는 DuckDB 운영 SQL 조각 모음입니다.
  • 세션 기준선은 threads·memory_limit·temp_directory·max_temp_directory_size·preserve_insertion_order를 고정하고 duckdb_settings()로 검증합니다.
  • 입력은 read_parquet 결과를 input_manifest 테이블로 고정해 재현성을 확보하고, scan·filter pushdown·join·집계는 EXPLAIN ANALYZE로 점검합니다.
  • OOM 대응 템플릿은 threads/memory를 낮추고 spill용 temp_directory를 지정한 뒤 단계별 CREATE TABLE로 staging합니다.
  • Publish는 staging prefix에 run_id 경로로 COPY한 뒤 별도 orchestration에서 검증 후 catalog pointer를 final로 전환합니다.

이 장은 설명보다 바로 복사해 쓰는 운영 조각에 집중합니다. 팀 표준에 맞춰 path, region, memory, partition key만 바꿔 쓰면 됩니다.

세션 기준선

SELECT version();

SET threads = 4;
SET memory_limit = '8GB';
SET temp_directory = '/mnt/fast-ssd/duckdb.tmp';
SET max_temp_directory_size = '200GB';
SET preserve_insertion_order = false;

SELECT name, value
FROM duckdb_settings()
WHERE name IN (
  'threads',
  'memory_limit',
  'temp_directory',
  'max_temp_directory_size',
  'preserve_insertion_order'
)
ORDER BY name;

S3 secret

INSTALL httpfs;
LOAD httpfs;

CREATE OR REPLACE SECRET lake_s3 (
  TYPE s3,
  PROVIDER credential_chain,
  REGION 'ap-northeast-2',
  SCOPE 's3://company-lake/'
);

SELECT *
FROM read_parquet('s3://company-lake/raw/events/dt=2026-05-14/*.parquet');

Parquet metadata 점검

SELECT *
FROM parquet_schema('curated/orders.parquet')
ORDER BY name;

SELECT
  file_name,
  row_group_id,
  row_group_num_rows,
  total_compressed_size AS compressed_bytes,
  compression
FROM parquet_metadata('curated/orders.parquet')
ORDER BY file_name, row_group_id;

입력 manifest 고정

CREATE OR REPLACE TABLE input_manifest AS
SELECT DISTINCT filename
FROM read_parquet('s3://company-lake/raw/events/dt=2026-05-14/*.parquet');

COPY input_manifest
TO 's3://company-lake/manifests/events/dt=2026-05-14/files.csv'
  (FORMAT csv, HEADER true);

EXPLAIN ANALYZE 점검표

EXPLAIN ANALYZE
SELECT
  customer_id,
  date_trunc('month', order_date) AS month,
  sum(amount) AS revenue
FROM read_parquet('s3://company-lake/curated/orders/**/*.parquet', hive_partitioning = true)
WHERE year = 2026
GROUP BY ALL
ORDER BY ALL;
확인질문
scan필요한 파일만 읽는가
filterscan 단계로 pushdown되는가
joinnested loop나 cardinality 폭발이 없는가
aggregategroup key cardinality가 예상 범위인가
sort/windowblocking operator가 전체 시간을 지배하지 않는가

OOM 대응 SQL

SET threads = 2;
SET memory_limit = '6GB';
SET preserve_insertion_order = false;
SET temp_directory = '/mnt/fast-ssd/duckdb-spill.tmp';

CREATE OR REPLACE TABLE stage_filtered AS
SELECT *
FROM read_parquet('s3://company-lake/raw/events/**/*.parquet')
WHERE event_date >= DATE '2026-05-01';

CREATE OR REPLACE TABLE stage_agg AS
SELECT user_id, event_name, count(*) AS events
FROM stage_filtered
GROUP BY ALL;

Partition 설계표

후보 keyfilter 빈도cardinalitypartition당 예상 크기채택
dt높음일 단위500MB예
tenant_id중간수천 이상불균등아니오
region중간5-20충분조건부
event_name낮음수백작음아니오

Publish 패턴

COPY (
  SELECT *
  FROM mart_orders
) TO 's3://company-lake/staging/orders/run_id=20260514T090000Z'
  (FORMAT parquet, PARTITION_BY (year, month), COMPRESSION zstd);

-- 이후 별도 orchestration 단계에서 row count, schema, partition size를 검증한 뒤
-- catalog pointer 또는 manifest를 final로 전환한다.

참고 자료

  • Configuration
  • S3 API Support
  • Parquet Metadata
  • EXPLAIN ANALYZE
  • Out of Memory Errors

관련 문서

성능 프로파일링

EXPLAIN, EXPLAIN ANALYZE, profiling output으로 DuckDB 쿼리 병목을 읽는 기준을 정리합니다.

검증 리포트

DuckDB 고급 활용 핸드북의 구조·링크·공식 근거·버전 기준 검증 결과

보안 Hardening 체크리스트

로컬 노트북, CI 배치, 내부 분석 서비스별 DuckDB 보안·리소스·확장 정책을 표준화합니다.

참고 자료

DuckDB 고급 활용 핸드북의 공식 문서·릴리스 근거 모음

On this page

세션 기준선S3 secretParquet metadata 점검입력 manifest 고정EXPLAIN ANALYZE 점검표OOM 대응 SQLPartition 설계표Publish 패턴참고 자료