본문 바로가기

개발

[python]DuckDB와 데이터 처리

최근 재미있는 DB에 대한 소개를 받았습니다.

바로 DuckDB라는 건데요. 2019년에 등장하여 이미 인기있는 데이터 분석을 위한 DB로 소개되고 있네요.. 

https://duckdb.org/

 

An in-process SQL OLAP database management system

DuckDB is an in-process SQL OLAP database management system. Simple, feature-rich, fast & open source.

duckdb.org

 

DuckDB는 in-process SQL OLAP DBMS라는데요..
in-process 즉, 응용(app) 내에서 in memory 방식으로 처리되며, 벡터화된 쿼리 엔진에,
분석 처리(OLAP)를 목적으로 하는(트랜잭션 처리(OLTP)가 아닌) 빠르고 효율적인 DB라고 합니다.

(SQL 사용 시 column 기반의 Apache Parquet 방식을 사용한다고 합니다.. 열 기반(!!)도 재미있네요)

 

0) 설치

설치는 pip를 이용해서 설치할 수 있습니다. 

pip install duckdb

pip install duckdb
(그림 1) pip를 이용한 duckdb 설치

(2024.05.12. 기준으로 v0.10.2.가 릴리즈 중이었지만, 2025.02.17. 기준으로는 v1.2.0이 릴리즈 중입니다 = 최신걸 사용합시다)

 

1) 이용

# import libs
import duckdb

# ...

# import data from pandas dataframe(df0)
sql1 = 'select col1, col2, avg(col3) as avg from df0 group by col1, col2'
df_res1 = duckdb.sql(sql1).df() # res to dataframe

print(df_res1)

sql2 = 'select col1, col2 from {}'.format('df0')
df_res2 = duckdb.sql(sql2).df() # DataFrame
#pl_res2 = duckdb.sql(sql2).pl() # Polars
#ar_res2 = duckdb.sql(sql2).arrow() # Arrow Table

# duckdb.read_csv('ex1.csv')
# duckdb.read_json('ex2.json')
# duckdb.read_parquet('ex3.parquet')

# connecting to the in-memory db
conn_mem = duckdb.connect(':memory:')
conn_mem.sql('...').show()
conn_men.close()

# connecting to the db
conn_db = ductdb.connect('ddd.db')
conn_db.table('tblTest').show()
conn_db.close()

 

2) 이용 예시 - DuckDB를 간단히 사용해볼 수 있는 사이트도 있습니다. 

https://shell.duckdb.org/

 

DuckDB Shell

 

shell.duckdb.org

 

 

참고)

  https://duckdb.org/docs/data/overview

  https://duckdb.org/docs/sql/functions/overview

  https://duckdb.org/docs/sql/aggregates

  https://duckdb.org/docs/api/python/overview.html

 

  https://motherduck.com/blog/duckdb-versus-pandas-versus-polars/

  https://www.infoq.com/articles/analytical-data-management-duckdb/

 

 

반응형