# 데이터 없이도 데이터베이스가 되는 DuckDB

> Clean Markdown view of GeekNews topic #15093. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15093](https://news.hada.io/topic?id=15093)
- GeekNews Markdown: [https://news.hada.io/topic/15093.md](https://news.hada.io/topic/15093.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-31T08:34:22+09:00
- Updated: 2024-05-31T08:34:22+09:00
- Original source: [nikolasgoebel.com](https://www.nikolasgoebel.com/2024/05/28/duckdb-doesnt-need-data.html)
- Points: 19
- Comments: 2

## Summary

DuckDB는 데이터가 실제로 데이터베이스에 저장되지 않아도 데이터베이스처럼 작동하여 대용량 데이터를 효율적으로 처리할 수 있습니다. 예를 들어, 로보택시 서비스에서 생성되는 대규모 데이터를 DuckDB를 통해 쉽게 공유하고 분석할 수 있습니다. DuckDB는 데이터 형식이나 스키마 변경에도 강하며, 필요한 데이터만 다운로드하여 효율적인 데이터 처리를 지원합니다.

## Topic Body

- DuckDB는 데이터가 실제로 데이터베이스에 내부적으로 저장하지 않아도 데이터베이스처럼 작동할 수 있음  
- 데이터는 별도의 저장소에 저장되고, 데이터베이스는 이를 참조하는 방식으로 동작   
- 데이터베이스 파일에는 실제 데이터를 포함하지 않고, 데이터를 어떻게 처리할지에 대한 지침만 포함함  
  
#### 예시: 로보택시 서비스  
  
- **상황 설명**: 로보택시 서비스에서 매일 생성되는 데이터를 분석가와 공유해야 하는 상황.  
- **문제점**: 데이터가 너무 커서 이메일로 보내기 어렵고, 링크로 공유하기도 복잡함.  
- **해결책**: DuckDB를 사용하여 데이터베이스 파일을 생성하고 이를 공유함.  
  
```python  
# 데이터베이스 생성  
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 세션을 시작하고 공유된 데이터베이스 파일에 연결함.  
  
```python  
# 데이터베이스 연결  
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를 사용하면 관계형 데이터셋을 하이퍼링크를 통해 쉽게 접근할 수 있음.

## Comments



### Comment 25951

- Author: yangeok
- Created: 2024-06-05T12:13:57+09:00
- Points: 1

오 라지 데이터에서 스몰 데이터의 카탈로그와 정확한 경로만 있으면 서버 리소스를 조금 아낄 수도 있겠네요 ㅎㅎ

### Comment 25749

- Author: neo
- Created: 2024-05-31T08:34:23+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40509987) 
- **DuckDB와 duckdb-wasm을 사용하여 폼 빌더 SaaS의 응답 시트를 효율적으로 처리함**: 응답 데이터를 S3에 저장하고, 클라이언트에서 duckdb-wasm을 통해 로컬 DB로 쿼리하여 네트워크와 메모리 사용을 최적화함.

- **MotherDuck 소개**: 서버리스 관리형 DuckDB 데이터 웨어하우스로, 무복사 클론, 보안 공유, 클라우드 데이터와의 하이브리드 모드 등을 제공함.

- **DuckDB를 qStudio SQL 에디터에 통합**: 다양한 데이터베이스와의 조인을 지원하며, DuckDB를 시작하기 좋은 IDE로 추천함.

- **S3 링크를 통해 데이터 제공 제안**: 중간 데이터베이스와 뷰의 가치를 의문시하며, 데이터 분석가가 원시 데이터를 직접 다루는 것이 더 효율적일 수 있다고 주장함.

- **Data Tap 소개**: Lambda 함수에 DuckDB를 내장하여 데이터를 S3에 Parquet 형식으로 저장하는 솔루션으로, 비용 효율성과 확장성을 강조함.

- **데이터 접근 방식에 대한 혼란**: 데이터 엔지니어는 사전 집계를 피하고, 데이터 분석가는 원시 데이터 접근을 선호하는 경향이 있다고 설명함.

- **대부분의 데이터베이스가 데이터를 포함하지 않는다는 주장에 대한 반응**: 이 주장이 과장되었다고 생각함.

- **SQL 쿼리를 동료에게 이메일로 보내는 방법 제안**: 바이너리 데이터베이스 파일의 장점에 대해 의문을 제기함.

- **새로운 SQL 도구의 유용성에 대한 의문**: 영구적인 데이터 웨어하우스에 데이터를 저장하고 필요한 뷰를 생성하는 것이 더 적절하다고 생각함.

- **Presto/Trino와의 유사성**: DuckDB의 접근 방식이 Presto/Trino와 유사하다고 느끼는 의견.
