DuckDB 1.2 亮点功能

DuckDB团队
2025-03-06 · 4 分钟

简而言之:本文重点介绍 DuckDB 1.2 中引入的一些令人激动的新功能。

我们昨天发布了 DuckDB 1.2.1 错误修复版本。一如既往,请查阅发布说明以获取完整的更改列表,并访问安装页面以获取安装或升级说明。在这篇文章中,我们将重点介绍 DuckDB 最近添加的一些功能以及其生态系统中的改进。

新的客户端页面

DuckDB 的客户端 API(或“驱动程序”)通过多个集中式存储库分发,例如适用于 R 的 CRAN 和适用于 Java 的 Maven。为了帮助用户跟踪新 DuckDB 版本的发布,我们重新设计了“客户端”页面,以显示每个客户端的最新版本。该页面还阐明了适用于客户端的支持层级。

更简单的安装

秉承 DuckDB 的“低摩擦”原则,我们确保您可以更轻松地安装 DuckDB 命令行客户端

Linux 和 macOS 上的安装脚本

现在可以使用安装脚本在类 UNIX 系统上安装 DuckDB

curl https://install.duckdb.org | sh

该脚本会检测您的操作系统和架构,获取最新版本的标签,如果不存在,则将最新可用的 DuckDB 二进制文件下载到 ~/.duckdb/cli~/.duckdb 文件夹已用于存储扩展)。

运行该脚本不需要 root (sudo) 权限,它只使用 curlzcat 工具,这些工具广泛可用。您可以通过在浏览器中访问 install.duckdb.org 来检查 shell 脚本。

Windows 上的签名二进制文件

从 v1.2.1 开始,我们为 DuckDB Windows 命令行客户端提供了数字签名的二进制文件。这意味着您可以在要求签名二进制文件的环境中运行 DuckDB。

DuckDB 1.2 未被充分提及的功能

除了公告博客文章中“1.2.0 版本新增功能”部分之外,我们还收集了 v1.2.0 中引入的五个新功能。

OR / IN 过滤器下推

从 1.2.0 版本开始,DuckDB 支持 ORIN 表达式用于过滤器下推。这项优化在查询远程 Parquet 文件或 DuckDB 数据库时特别有用。

-f 命令行标志

DuckDB CLI 客户端现在支持 -f 标志来执行 SQL 脚本文件

duckdb -f script.sql

这等同于

duckdb -c ".read script.sql"

此功能已在DuckDB tldr 页面中记录。如果您安装了 tldr,可以通过 tldr duckdb 在 CLI 中获取此页面。

allowed_directories / allowed_paths 选项

我们继续改进对在安全环境中操作 DuckDB 的支持。allowed_directoriesallowed_paths 选项允许限制 DuckDB 对特定目录或文件(分别)的访问。这些选项允许对文件系统进行细粒度访问控制。例如,您可以将 DuckDB 设置为仅使用 /tmp 目录。

SET allowed_directories = ['/tmp'];  
SET enable_external_access = false;  
FROM read_csv('test.csv');  

应用此设置后,DuckDB 将拒绝读取当前工作目录中的文件

Permission Error:
Cannot access file "test.csv" - file system operations are disabled by configuration  

sum(BOOLEAN)

您现在可以直接计算 BOOLEAN 表达式的和而无需将其包装到 CASE 表达式中

SELECT sum(l_extendedprice > 500) FROM lineitem;  

这等同于

SELECT sum(CASE WHEN l_extendedprice > 500 THEN 1 END) FROM lineitem;  

Excel 扩展

在 DuckDB 1.2 之前,Excel 文件仅受spatial 扩展支持,这是一个具有多个依赖项的重量级扩展。从 1.2 版本开始,excel 扩展(以前仅限于计算一些公式)可以读取和写入 Excel 表。例如

FROM read_xlsx('test.xlsx', header = true);  

如果您想使用 Google 表格工作表,请查看gsheets 社区扩展

在互联网上

互联网上有许多关于 DuckDB 的存储库和信息。我们重点介绍其中两个重要的

Awesome DuckDB

DuckDB 的生态系统持续增长:许多项目都在 DuckDB 之上和 DuckDB 内部构建。由 David Gasquez 维护的社区驱动的 awesome-duckdb 存储库列出了这些项目,并且最近已超过 200 个条目。

DuckDB 文件签名

DuckDB 的文件签名DUCK(十六进制:44 55 43 4B),现已列在维基百科上。

Parquet 信息表

我们已将 DuckDB 添加到Parquet 文档的“实现状态”页面。在此过程中,我们还改进了 DuckDB 对 Parquet 的支持,例如,通过添加FLOAT16 逻辑类型