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 ❌ 当前不支持(但未来可能)

官网 & 资源


如果你正在用 Pandas 处理大 CSV 文件觉得慢,试试 DuckDB,你会发现:“原来分析可以这么快!”

posted @ 2025-08-12 09:54  zart2007  阅读(161)  评论(0)    收藏  举报