- DuckDB는 데이터가 실제로 데이터베이스에 내부적으로 저장하지 않아도 데이터베이스처럼 작동할 수 있음
- 데이터는 별도의 저장소에 저장되고, 데이터베이스는 이를 참조하는 방식으로 동작
- 데이터베이스 파일에는 실제 데이터를 포함하지 않고, 데이터를 어떻게 처리할지에 대한 지침만 포함함
예시: 로보택시 서비스
- 상황 설명: 로보택시 서비스에서 매일 생성되는 데이터를 분석가와 공유해야 하는 상황.
- 문제점: 데이터가 너무 커서 이메일로 보내기 어렵고, 링크로 공유하기도 복잡함.
- 해결책: DuckDB를 사용하여 데이터베이스 파일을 생성하고 이를 공유함.
# 데이터베이스 생성
import duckdb
db = duckdb.connect("weird_rides.db")
db.sql("""
CREATE VIEW weird_rides
AS SELECT pickup_at, dropoff_at, trip_distance, total_amount
FROM 's3://robotaxi-inc/daily-ride-data/*.parquet'
WHERE fare_amount > 100 AND trip_distance < 10.0
""")
db.close()
- 결과:
weird_rides.db 파일은 실제 데이터를 포함하지 않지만, 데이터를 어떻게 처리할지에 대한 지침을 포함함.
- 공유 방법: 이 파일을 블롭 저장소에 업로드하고 링크를 공유함.
데이터 접근
- 데이터베이스 연결: 수신자는 로컬 DuckDB 세션을 시작하고 공유된 데이터베이스 파일에 연결함.
# 데이터베이스 연결
import duckdb
conn = duckdb.connect()
conn.sql("""
ATTACH 's3://robotaxi-inc/virtual-datasets/weird_rides.db'
AS rides_db (READ_ONLY)
""")
conn.sql("SELECT * FROM rides_db.weird_rides LIMIT 5")
- 데이터 다운로드: 쿼리를 실행할 때 필요한 데이터만 S3에서 다운로드함.
- 효율적인 데이터 처리: 필요한 열만 읽고, 필터를 적용하여 불필요한 데이터를 제외함.
DuckDB의 장점
- 변경에 강함: 데이터 형식, 파티셔닝 전략, 스키마 변경에도 수신자의 데이터 접근 방식은 변하지 않음.
- 데이터 클라우드 브라우저: DuckDB를 사용하면 관계형 데이터셋을 하이퍼링크를 통해 쉽게 접근할 수 있음.