DuckDB 1.5.0 震撼发布
DuckDB 1.5.0 震撼发布
DuckDB 1.5.0 震撼发布!CLI重写、VARIANT类型、空间函数内置,性能狂飙17%!
6500+ commits,近百位贡献者,这次更新堪称“史诗级”!
各位数据领域的小伙伴们,今天我们要宣布一个重磅消息:DuckDB 1.5.0 正式发布!代号“Variegata”,灵感源自新西兰特有的天堂鸭。这次更新不仅带来了全新设计的命令行客户端,还引入了原生 VARIANT 类型、将 GEOMETRY 类型内置,并实现了非阻塞检查点等多项性能优化。话不多说,直接上干货!
🔥 新特性速览
1️⃣ 命令行客户端(CLI)彻底翻新
如果你喜欢在终端里操作 DuckDB,那这次更新绝对让你眼前一亮!CLI 现在拥有全新的配色方案、动态提示、分页器,以及一系列便捷命令。
🎨 全新配色
暗色/亮色模式统一,文档风格同步。关键字、字符串、错误信息、函数、数字各有专属颜色,且支持自定义:
.highlight_colors column_name darkgreen bold_underline
.highlight_colors numeric_value red bold
.highlight_colors string_value purple2
FROM ducks;
💬 动态提示
默认显示当前连接的数据库和 schema,让你时刻知道自己身在何处:
memory D ATTACH 'my_database.duckdb';
memory D USE my_database;
my_database D CREATESCHEMA my_schema;
my_database D USE my_schema;
my_database.my_schema D ...
📋 更智能的 .tables 和 DESCRIBE
DESCRIBE直接展示表结构:
DESCRIBE ducks;
┌──────────────────────┐
│ ducks │
│ id integer │
│ name varchar │
│ extinct_year integer │
└──────────────────────┘
.tables则一览所有库、模式、表及其列,层次清晰。
⚡ 用 _ 访问上一次查询结果
再也不怕丢失结果或重复执行耗时查询:
FROM ducks WHERE extinct_year IS NOT NULL;
FROM _; -- 再次查询相同结果
📄 内置分页器
memory D .maxrows 100
memory D FROM range(0, 100);
当结果超过50行时自动启用分页,Linux/Windows 用 Page Up/Down 翻页,macOS 用 Fn+↑/↓,按 Q 退出。
2️⃣ VARIANT 类型原生支持
灵感来自 Snowflake 的 VARIANT,现已成为 DuckDB 的一等公民!与 JSON 不同,VARIANT 存储的是带类型的二进制数据,压缩率和查询性能更优。
同一列可以存储不同类型的数据:
CREATETABLEevents (idINTEGER, data VARIANT);
INSERTINTOeventsVALUES
(1, 42::VARIANT),
(2, 'hello world'::VARIANT),
(3, [1, 2, 3]::VARIANT),
(4, {'name': 'Alice', 'age': 30}::VARIANT);
查询类型信息:
SELECTid, data, variant_typeof(data) AS vtype FROMevents;
┌───────┬────────────────────────────┬───────────────────┐
│ id │ data │ vtype │
│ int32 │ variant │ varchar │
├───────┼────────────────────────────┼───────────────────┤
│ 1 │ 42 │ INT32 │
│ 2 │ hello world │ VARCHAR │
│ 3 │ [1, 2, 3] │ ARRAY(3) │
│ 4 │ {'name': Alice, 'age': 30} │ OBJECT(name, age) │
└───────┴────────────────────────────┴───────────────────┘
提取嵌套字段:
SELECT data.name FROMeventsWHEREid = 4; -- 或使用 variant_extract
Parquet 文件中的 VARIANT 类型也能直接读取,支持“切碎”存储(shredding)。
3️⃣ PEG 解析器(实验性)
基于解析表达式文法的全新解析器,带来更智能的建议和更清晰的错误信息。默认关闭,可通过 CALL enable_peg_parser(); 开启。目前已在提示功能中使用(按 Tab 循环选项):
FROM ducks WHERE habitat IS
IS ISNULL ILIKE IN INTERSECT LIKE
未来版本将全面切换。
4️⃣ 湖仓格式全面升级
DuckLake 更新至 v0.4 规范,新增宏、排序表、删除内联等功能,为即将发布的 DuckLake 1.0 铺路。 Delta Lake 强化了对 Unity Catalog 写入、幂等写入和表检查点的支持。 Iceberg 支持在 CREATE TABLE 中指定表属性,并可通过额外 HTTP 头连接 Google BigLake。Iceberg v3 的 VARIANT 支持将在 1.5.1 中推出。
5️⃣ 网络栈切换至 libcurl
httpfs 扩展的后端从 httplib 换成了大名鼎鼎的 curl,稳定性和安全性再上一个台阶。原有配置选项(如超时、重试)保持不变。
6️⃣ Lambda 语法警告
从 v1.5 开始,旧式箭头语法 x -> x + 1 会触发弃用警告,推荐使用 Python 风格的 lambda x: x + 1。可通过 lambda_syntax 配置控制行为,DuckDB 2.0 将默认禁用箭头语法。
7️⃣ 空间扩展:GEOMETRY 类型内置!
划时代变化:GEOMETRY 类型从扩展移入核心,其他扩展(如 Postgres 扫描器、Arrow 转换)现在可以直接原生使用几何数据。
轴序变更:为了与其他 GIS 系统一致,引入了 geometry_always_xy设置。v1.5 中默认为旧行为(纬度/经度),但会发出警告;v2.0 中旧行为将报错;v2.1 起新行为(经度/纬度)成为默认。存储优化:使用标准的 WKB 编码,并对同类型几何列自动“切碎”存储,压缩率提升约 3 倍。 统计与优化:每个行组会记录边界框、几何类型等信息,查询优化器可利用它们跳过无关行组。 CRS 支持:类型系统内置坐标参考系参数,加载 spatial 扩展后可注册 7000+ EPSG 坐标系。
8️⃣ 性能优化:非阻塞检查点
检查点期间现在可以并发读取、写入、插入(带索引)和删除!TPC-H SF100 吞吐量提升 17%。聚合函数也有优化,如 last 函数提速 40%。
DuckDB 1.5.0 神级功能:无需ATTACH,直接用SQL通配符读取多个数据库!
还在为每次查询前都要ATTACH一堆数据库而烦躁?新函数
read_duckdb让你像查表一样潇洒!
DuckDB 1.5.0 带着一大堆黑科技来了,但今天我们要单独拎出一个极其贴心的小功能 —— read_duckdb 表函数。别看它个头小,用起来是真的香!
🤔 以前怎么读多个数据库?
假设你手头有 numbers1.db、numbers2.db、numbers3.db 三个数据库,每个里面都有一张表,你想跨库分析数据。过去你得:
ATTACH 'numbers1.db' AS db1;
ATTACH 'numbers2.db' AS db2;
ATTACH 'numbers3.db' AS db3;
-- 然后再写UNION ALL ...
麻烦不说,数据库一多还容易乱。
🚀 read_duckdb 来救场
现在只需一行:
SELECTmin(i), max(i)
FROM read_duckdb('numbers*.db');
结果直接出来:
┌────────┬────────┐
│ min(i) │ max(i) │
│ int64 │ int64 │
├────────┼────────┤
│ 1 │ 5 │
└────────┴────────┘
爽不爽? 不用显式 ATTACH,不用关心内部表名,甚至可以用通配符 * 匹配多个文件!它会自动读取所有匹配数据库中的全部表,并把它们当成一个大的数据源来查询。
🧠 原理是啥?
read_duckdb 是 DuckDB 1.5.0 新增的表函数,它能直接读取 DuckDB 数据库文件(即使文件没有后缀名)。支持:
单个文件: read_duckdb('my.db')通配符: read_duckdb('data/*.db')甚至可以读取远程文件(配合 httpfs)!
💡 适用场景
分库分表数据分析:比如每天一个日志库,用 read_duckdb('logs_2025*.db')一口气查全年数据。快速探索:拿到一堆 DuckDB 文件,想看看里面有什么,直接用 SQL 查询,省去 ATTACH 步骤。 ETL 管道:在脚本中批量处理多个数据库文件,代码更简洁。
📦 安装与分发更新
Python pip: pip install duckdb-cli,然后直接运行duckdb。Windows 安装脚本(Beta) : powershell -NoExit iex (iwr "https://install.duckdb.org/install.ps1").ContentLinux musl libc(如 Alpine) :GitHub 提供二进制包,需安装 libstdc++。扩展瘦身:DuckLake 扩展体积减少 30%,Excel 扩展减少 60%!
📌 版本路线图
v1.4(LTS)将维护至 2026 年 9 月。 v1.5 为当前最新版本。 下一个版本(预计 9 月发布)将是 DuckDB 2.0!
🙏 致谢
自 v1.4 以来,已有近 100 位贡献者提交了超过 6500 个 commit。感谢每一位社区成员的问题反馈和代码贡献!
立即体验 DuckDB 1.5.0 👉 安装指南
P.S. DuckDB刚刚还上线了全新官网首页,欢迎点击围观!