用途:DuckDB 是进程内运行的 SQL OLAP 分析型数据库,定位为“分析领域的 SQLite”,适合在应用进程内执行高速列式分析查询,处理本地文件与远程对象存储数据。
主要能力:可直接查询 Parquet、CSV、JSON 等外部文件,无需先导入数据库;支持通过 httpfs 扩展查询 S3 上的 Parquet 文件;提供与 Apache Arrow 的零拷贝集成,可在 Python/Pandas/Polars 与 DuckDB 内存结构间传递数据;支持单文件持久化存储,具备高压缩与可移植性;采用向量化执行,可利用 CPU SIMD 并行。
使用方式:Python 中可 import duckdb 后直接执行 SQL,例如 duckdb.sql("SELECT avg(price) FROM 'sales.csv' WHERE region='US'").show()。查询 S3 需先执行 INSTALL httpfs; LOAD httpfs;,再查询 s3:// 路径。持久化可用 duckdb.connect("analytics.duckdb") 创建连接并建表。
适用场景:本地数据科学与 Jupyter Notebook 分析、直接查询 Parquet/Arrow/CSV、无服务器 ETL 数据转换(如 AWS Lambda)、本地 CLI 脚本等。
限制与注意事项:不适合高并发多客户端 OLTP 场景;生产循环中不宜反复读取 CSV,建议先转为 Parquet;需确保 conn.close() 释放文件句柄;内存受限环境可设置 SET max_memory = '4GB';查询 S3 需配置区域与凭证。常见问题包括内存超限、表已存在、文件无法打开等,可分别通过设置内存上限、使用 IF NOT EXISTS、安装 httpfs 并配置凭证解决。官方文档为 DuckDB Documentation。