DuckDB 是一款进程内的分析型数据库 ,常被称为"分析领域的 SQLite"-7-10。它和你刚才了解的 Parquet 关系很密切,经常搭配使用。
它解决什么问题
传统的分析工具(如 Pandas)在处理几 GB 数据时还行,数据再大就容易内存不够或变慢。而大数据方案(如 Spark)又太重,需要集群和复杂配置。DuckDB 卡在中间:单机就能跑,但性能很强 ,官方提到可以在笔记本上处理数百 GB 数据-2。
核心特点
-
进程内运行 :没有独立的服务器进程,直接嵌在你的 Python、R 或 Java 程序里,像调用一个库一样简单-4-6。安装通常就是
pip install duckdb-10。 -
列式存储 :和你刚了解的 Parquet 类似,DuckDB 底层也是按列存的,查询时只读需要的列,速度快、压缩率高-9。
-
直接查文件 :这是它和 Parquet 结合最紧的一点。你不需要先把 Parquet 文件导入数据库 ,DuckDB 可以直接用 SQL 查询本地的 Parquet、CSV、JSON 文件,甚至 S3 上的数据-1-5。
-
单文件数据库 :如果你需要持久化存储,整个数据库就是一个文件 ,方便复制和携带-9。
和 Parquet 搭配使用
你可以把 DuckDB 想象成一个临时的 SQL 查询引擎,专门用来快速分析散落在磁盘上的 Parquet 文件。
比如,你有一堆 Parquet 日志文件,想统计某个字段的分布,不需要写复杂的 Spark 任务,在 Python 里几行代码就能直接用 SQL 查:
import duckdb
# 直接对 Parquet 文件跑 SQL,无需导入
duckdb.sql("""
SELECT city, count(*)
FROM 'logs/*.parquet'
GROUP BY city
""").show()
所以,如果你手头有 Parquet 数据要做快速分析,DuckDB 是一个非常轻便顺手的选择。