Python 库 DuckDB
Python 库 DuckDB
DuckDB 是一个开源的、嵌入式、列式存储的数据库管理系统(DBMS),专为 在线分析处理(OLAP) 和 数据分析 场景设计。它被称为“分析型数据库的 SQLite”。
DuckDB 是什么?一句话介绍
DuckDB 是一个轻量级、高性能、零配置的嵌入式分析数据库,适合处理本地数据分析任务,就像 SQLite 之于事务处理,DuckDB 之于数据分析。
核心特点
| 特性 | 说明 |
|---|---|
| ✅ 嵌入式(In-process) | 直接运行在应用程序中(如 Python、R、C++),无需独立服务器 |
| ✅ 列式存储(Column-oriented) | 非常适合聚合查询(SUM, AVG, GROUP BY) |
| ✅ 高性能 | 对大量数据的分析查询速度极快,支持向量化执行引擎 |
| ✅ SQL 支持完整 | 支持标准 SQL(包括窗口函数、CTE、JOIN 等) |
| ✅ 零配置 | 不需要安装、启动服务、管理用户等复杂操作 |
| ✅ 支持多种数据格式 | 可直接查询 CSV、Parquet、JSON、Arrow 等文件 |
| ✅ 多语言接口 | Python、R、Java、C/C++、Node.js、Go、.NET 等都支持 |
| ✅ 开源免费 | MIT 许可证,可商用 |
与 SQLite 对比
| 特性 | SQLite | DuckDB |
|---|---|---|
| 存储方式 | 行式存储 | 列式存储 ✅ |
| 主要用途 | 事务处理(OLTP) | 数据分析(OLAP) ✅ |
| 查询性能(分析类) | 一般 | 非常快 ✅ |
| 文件大小支持 | 小到中等 | 中到大(TB 级别压缩数据) |
| 内存使用 | 低 | 较高(但可配置) |
| 是否需要服务 | 否 | 否 ✅(都是嵌入式) |
所以:
- 你要做 增删改查 + 事务 → 用 SQLite
- 你要做 数据分析 + 聚合 + 统计 → 用 DuckDB
Python 示例:用 DuckDB 分析 CSV 文件
import duckdb
# 直接查询 CSV 文件(无需加载到内存)
result = duckdb.sql("""
SELECT
country,
AVG(price) as avg_price,
COUNT(*) as count
FROM 'sales.csv'
WHERE date >= '2023-01-01'
GROUP BY country
ORDER BY avg_price DESC
LIMIT 10
""").df() # 结果转为 Pandas DataFrame
print(result)
✅ 不需要先用
pandas.read_csv() 加载整个文件,DuckDB 会按需读取和过滤。
常见使用场景
1. 替代 Pandas 做大数据分析
- 当你的 CSV 超过 1GB,Pandas 变慢时,用 DuckDB 更高效。
2. ETL 数据预处理
-- 清洗并导出为 Parquet
COPY (
SELECT * FROM 'raw_data.csv'
WHERE valid_email(email)
) TO 'clean_data.parquet';
3. Jupyter Notebook 中的快速分析
- 直接在 notebook 里写 SQL 分析本地文件,比写 Python 更简洁。
4. BI 工具后端
- Power BI、Tableau、Superset 等可通过插件连接 DuckDB。
5. 边缘计算 / 桌面应用内嵌分析
- 嵌入到桌面软件中,用于本地报表生成。
安装 DuckDB(Python)
pip install duckdb
然后就可以在 Python 中使用:
import duckdb
# 创建内存数据库
con = duckdb.connect()
# 或连接到文件(持久化)
# con = duckdb.connect('my_data.db')
con.execute("CREATE TABLE items AS SELECT * FROM 'items.csv'")
print(con.execute("SELECT COUNT(*), AVG(price) FROM items").fetchall())
高级功能
| 功能 | 说明 |
|---|---|
| Parquet 支持 | SELECT * FROM 'data.parquet' |
| Arrow 集成 | 与 PyArrow 高效交互 |
| 窗口函数 | ROW_NUMBER(), RANK(), LAG() |
| 用户自定义函数(UDF) | 用 Python/C 写自定义函数 |
| 并发查询 | 支持多线程查询(GIL 友好) |
| 加密扩展(企业版) | 支持数据库加密 |
生态工具
- MotherDuck:DuckDB 的云服务版本(类似“DuckDB in the Cloud”)
- Polars / Inquirer DB:与 DuckDB 深度集成的数据分析库
- DBT-DuckDB:支持用 dbt(data build tool)构建数据管道
✅ 总结:DuckDB 适合谁?
| 用户类型 | 是否适合 DuckDB |
|---|---|
| 数据分析师 | ✅ 强烈推荐!本地分析神器 |
| 数据工程师 | ✅ ETL、数据清洗 |
| Python 开发者 | ✅ 替代 Pandas 处理大文件 |
| Web 后端开发 | ❌ 不适合高并发 OLTP |
| 移动 App | ❌ 当前不支持(但未来可能) |
官网 & 资源
- 官网:https://duckdb.org
- 文档:https://duckdb.org/docs/
- GitHub:https://github.com/duckdb/duckdb
- MotherDuck(云版):https://motherduck.com
如果你正在用 Pandas 处理大 CSV 文件觉得慢,试试 DuckDB,你会发现:“原来分析可以这么快!”
浙公网安备 33010602011771号