DuckDB 是一个近几年非常火的 嵌入式 OLAP 数据库,你可以把它看作是 “数据分析领域的 SQLite”。它特别适合在 单机/笔记本环境下做大规模数据分析。
🦆 DuckDB 速览
📌 核心特点
- 嵌入式:像 SQLite 一样,无需单独的服务进程,直接嵌入到应用或脚本里。
- OLAP 优化:面向分析型场景(OLAP),列存储、向量化执行。
- 零配置:下载即用,不需要复杂的配置。
- 超快性能:在大表 JOIN、聚合、窗口函数上表现接近甚至优于 Spark/Pandas。
- 兼容性强:支持 SQL 标准,能直接读写 Parquet、CSV、JSON,并且和 pandas、Arrow 无缝集成。
🔗 与常见工具对比
特性 | DuckDB | SQLite | Pandas | Spark |
---|---|---|---|---|
定位 | 嵌入式 OLAP 数据库 | 嵌入式事务型数据库 | 内存数据分析 | 分布式大数据计算 |
存储格式 | 列存储 | 行存储 | 内存 | 分布式文件系统 |
性能优化 | 向量化执行,SIMD 加速 | 简单执行引擎 | 单线程操作为主 | 分布式调度优化 |
数据规模 | GB ~ TB 级别(单机内存+磁盘) | MB ~ GB | 内存受限 | TB ~ PB(集群) |
接口 | SQL / Python / R | SQL / Python | Python API | SQL / PySpark / Scala |
典型场景 | 本地大数据分析、交互式查询、ETL | 嵌入式事务、配置存储 | 数据探索、小规模分析 | 企业级大规模数据仓库 |
🛠️ 使用示例(Python)
import duckdb
import pandas as pd
# 创建一个内存数据库
con = duckdb.connect()
# 从 CSV 文件直接查询
df = con.execute("SELECT * FROM 'data.csv' WHERE amount > 100").df()
# 与 pandas 无缝结合
pdf = pd.DataFrame({
"user": ["a", "b", "c"],
"score": [10, 20, 30]