DuckDB: it's not quack science

Lobsters Hottest 工具

摘要

DuckDB是一个开源嵌入式分析型数据库,支持直接查询文件、嵌入应用,并提供友好的SQL扩展,在数据分析场景下比传统Unix管道更高效。

<p><a href="https://lobste.rs/s/stbnxi/duckdb_it_s_not_quack_science">Comments</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/03 13:46

**TL;DR:** DuckDB 是一个开源、嵌入式、支持 SQL 的分析型数据库,既可以作为命令行工具直接查询文件,也可以作为库嵌入应用,在快速数据分析场景下比传统 Unix 管道更灵活高效。 ## DuckDB 概览 DuckDB 是基于 MIT 许可证的开源关系型数据库,采用 PostgreSQL 的 SQL 方言。代码约一百万行 C++,无外部依赖,可编译为约 50 MB 的单一二进制文件,无需 root 或 sudo 即可运行。演讲者 Gabor Sarn 从三个角度展示 DuckDB 的灵活性:命令行工具、便携数据库和数据库服务器。 ## 命令行工具 ### 直接查询文件 安装后输入 `duckdb` 即可进入 REPL。DuckDB 允许直接在查询中引用 CSV/TSV 文件,无需预先创建表或定义模式。例如,要列出高速铁路经过的不同国家: ```sql SELECT DISTINCT country FROM 'stations.tsv'; ``` 自动检测表头、字段类型并加载为临时表,结果与 Unix 管道 `cat stations.tsv | tail -n +2 | cut -f2 | sort -u` 一致,但更简洁。 ### 在管道中工作 DuckDB 支持 Unix 管道组合:`duckdb -c "SELECT ..."` 可接受标准输入或输出到标准输出,作为管道中间环节。对于更复杂的分析(如 JOIN 两个文件),DuckDB 只需一行 SQL: ```sql SELECT * FROM 'trains.tsv' JOIN 'stations.tsv' USING (station); ``` 而纯 Unix 工具实现则需要预排序、处理表头、awk 拼接等繁琐步骤,随着查询复杂度增加会变得难以维护。 ### Pivot 与友好 SQL DuckDB 支持标准 SQL 之外的扩展,例如 PIVOT 操作。演示中,根据距离伦敦的数据创建站点间距离矩阵,并通过 `EXCLUDE` 子句批量转换单位(公里转英里): ```sql SELECT station1, * EXCLUDE (station1) / 1.61::INTEGER FROM pivot_result; ``` 同样,UNPIVOT 可将宽表还原为长表,利用列星号(`COLUMNS(*)`)简化操作。 ### CLI 总结 DuckDB 在 CLI 下:无需持久化存储,内存模式运行良好;支持自动并行化;可溢出到磁盘;类型安全且易于调试。演讲者对比了行计数性能:在 macOS 上 DuckDB 曾快于 BSD 的 `wc`,但在 2026 年 Rust 重写的 `wc`(uutils)已明显领先。 ## 便携数据库 DuckDB 可嵌入各类应用,提供 Python、Go、Rust、Java、JavaScript、R 等语言驱动,并支持 WebAssembly 在浏览器中运行。使用方式类似普通库: ```python import duckdb con = duckdb.connect('my.db') con.execute("FROM 'services*' LOAD DATA...") ``` ### 性能演示 以荷兰火车数据集(1.6 亿行,21 GB CSV)为例,DuckDB 在现代笔记本上加载速度约 1 GB/s,加载后查询平均延误时间仅 150 毫秒。结果可直接转换为 pandas DataFrame 用于可视化。 ## 友好 SQL DuckDB 致力于平滑 SQL 使用体验。演示中展示了一种将 CSV 文件直接置于 `FROM` 子句的写法(演讲中断于此,但上下文表明友好的 SQL 扩展使得原本繁琐的跨列操作变得简洁)。 --- **Source:** [YouTube: DuckDB: it's not quack science](https://www.youtube.com/watch?v=q6S0Vv4u3iM)

相似文章

Quack:DuckDB 的客户端-服务器协议

Hacker News Top

DuckDB 引入了名为“Quack”的全新客户端-服务器协议,使得 DuckDB 实例能够通过 HTTP 进行通信,在支持并发写入和远程访问的同时,保持简单性与高性能。