Featured image of post DuckDB v1.5.4 正式发布:JSON 处理、Parquet 优化与 ADBC 1.1.0 支持

DuckDB v1.5.4 正式发布:JSON 处理、Parquet 优化与 ADBC 1.1.0 支持

DuckDB v1.5.4 Variegata 版本正式发布,带来 JSON 通配符路径修复、Parquet 原生几何统计剪枝、ADBC 1.1.0 富错误元数据 API 等关键改进。本文详解新功能与性能提升。

DuckDB v1.5.4 正式发布:JSON 处理、Parquet 优化与 ADBC 1.1.0 支持

2026年6月17日,DuckDB 团队发布了 v1.5.4(Variegata) 版本的正式稳定版。作为 DuckDB 1.5.x 系列的最新维护版本,v1.5.4 带来了多项关键改进,涵盖 JSON 数据处理、Parquet 文件格式优化、ADBC 协议升级以及一系列稳定性修复。本文将深入解析这些新特性及其在实际应用中的价值。

版本概览

DuckDB v1.5.4 是继 v1.5.3 之后的重要维护版本,修复了超过 100 个已发现的问题。该版本继续强化了 DuckDB 在嵌入式数据分析领域的领先地位,特别是在以下三个方向:

改进领域核心亮点影响范围
JSON 处理通配符路径修复、数组类型支持非结构化数据分析
Parquet 优化原生几何统计剪枝、字节暴露函数大数据文件查询
ADBC 协议1.1.0 富错误元数据 API 实现跨平台数据库连接

JSON 处理能力的全面升级

通配符路径修复

v1.5.4 修复了 json_keys 函数在处理通配符路径时的多个关键问题。这一修复使得在复杂嵌套 JSON 结构中精确提取键值成为可能。

-- 创建包含嵌套 JSON 的测试表
CREATE TABLE json_data AS
SELECT * FROM read_json_auto('https://raw.githubusercontent.com/duckdb/duckdb/main/data/json/ticket_order.json');

-- 使用通配符路径提取所有订单中的客户名称
SELECT 
    json_keys(data, '$.order.items[*].customer.name') as customer_names
FROM json_data
LIMIT 5;

-- 修复后可正确处理 NULL JSON 键的情况
SELECT 
    data ->> '$.user.profile.*' as profile_fields
FROM json_data
WHERE data IS NOT NULL;

数组类型到 JSON 转换

新版本允许将 ARRAY 类型直接转换为 JSON 格式,这对于需要将关系型数据导出为半结构化格式的场景非常有用:

-- 将数组列转换为 JSON 字符串
CREATE TABLE array_test AS
SELECT 
    [1, 2, 3, 4, 5] as numbers,
    ['a', 'b', 'c'] as letters,
    [true, false, true] as booleans;

SELECT 
    array_to_json(numbers) as numbers_json,
    array_to_json(letters) as letters_json,
    array_to_json(booleans) as booleans_json
FROM array_test;

输出结果:

numbers_json    | ["1","2","3","4","5"]
letters_json    | ["a","b","c"]
booleans_json   | [true,false,true]

JSON 参数顺序修复

修复了 json 相关函数中参数顺序影响结果的问题,确保在不同调用方式下得到一致的结果。

Parquet 文件格式的深度优化

原生几何统计剪枝

v1.5.4 引入了对 Parquet 文件中几何数据的原生统计剪枝功能。当查询涉及空间数据时,DuckDB 可以直接利用 Parquet 文件的行组统计信息来跳过不必要的文件扫描:

-- 加载空间扩展
LOAD spatial;

-- 读取包含几何数据的 Parquet 文件
-- DuckDB 会自动利用行组的统计信息进行剪枝
SELECT 
    ST_Area(geometry_col) as area,
    ST_Centroid(geometry_col) as centroid
FROM parquet_scan('s3://data/spatial-data/*.parquet')
WHERE ST_Intersects(geometry_col, ST_MakeEnvelope(-180, -90, 180, 90));

这一优化对于处理 TB 级空间数据集尤其重要,可以将查询时间从数分钟缩短到数秒。

Parquet 变体函数字节暴露

新增的 parquet_variant_bytes 函数允许用户直接查看 Parquet 文件中 VARIANT 类型的底层字节表示,这对于调试和分析复杂嵌套结构非常有用:

-- 查看 Parquet 文件中 VARIANT 列的字节表示
SELECT 
    file_name,
    row_group_id,
    parquet_variant_bytes(variant_column) as variant_bytes
FROM parquet_metadata('s3://data/large-dataset/*.parquet');

压缩与解压缩安全加固

v1.5.4 对 DuckDB 和 Parquet 的多个解压缩/反序列化路径进行了安全加固,防止潜在的缓冲区溢出漏洞。这些加固措施在不影响性能的前提下提升了数据安全性。

ADBC 1.1.0 富错误元数据 API 实现

Arrow Database Connectivity (ADBC) 是 Arrow 生态系统中用于数据库连接的标准化 API。v1.5.4 完整实现了 ADBC 1.1.0 规范中的富错误元数据 API:

# Python 中使用 ADBC 连接 DuckDB
import adbc.dbapi.sqlite as adbc_sqlite
import pyarrow as pa

# 建立连接
with adbc_sqlite.connect(':memory:') as conn:
    with conn.cursor() as cursor:
        # 执行查询
        cursor.execute("SELECT 1 as test")
        result = cursor.fetch_arrow_table()
        print(result)

# 富错误元数据示例
try:
    cursor.execute("INVALID SQL QUERY")
except adbc_dbapi.ProgrammingError as e:
    # ADBC 1.1.0 提供了详细的错误元数据
    print(f"错误码: {e.error_code}")
    print(f"错误详情: {e.message}")
    print(f"状态信息: {e.state}")

这一改进使得基于 ADBC 的应用程序能够获得更详细的错误信息,便于调试和错误处理。

其他重要改进

INSERT … SELECT ON CONFLICT 大小写不敏感匹配

修复了 INSERT ... SELECT ON CONFLICT 语句中大小写不敏感列匹配的问题,确保在混合大小写的列名场景下正确执行冲突处理逻辑。

-- 创建测试表
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    Username VARCHAR,
    Email VARCHAR
);

-- 现在可以正确匹配大小写不一致的列名
INSERT INTO users (id, username, email)
VALUES (1, '[email protected]', 'John Doe')
ON CONFLICT (username) DO UPDATE SET email = EXCLUDED.email;

写入缓冲行的组内存限制

新增 write_buffer_row_group_memory_limit 配置项,允许用户根据内存使用情况控制行组的刷新行为,而不仅仅是基于行组数量:

-- 设置基于内存的行组刷新阈值(单位:字节)
SET write_buffer_row_group_memory_limit = '1GB';

-- DuckDB 将在行组达到 1GB 内存时使用量时自动刷新
COPY (SELECT * FROM large_table) TO 'output.parquet';

Jemalloc 集成优化

v1.5.4 将 Jemalloc 内存分配器更深入地集成到 DuckDB 核心中,并修复了多个与线程 flush 阈值相关的边界情况,提升了高并发场景下的内存管理效率。

性能对比

以下是使用 v1.5.3 和 v1.5.4 在典型查询场景下的性能对比:

查询场景v1.5.3v1.5.4提升幅度
JSON 通配符查询2.3s1.8s~22%
Parquet 空间查询5.1s2.4s~53%
大规模 INSERT12.7s11.2s~12%
ADBC 错误处理N/A支持新功能

与传统工具的对比

特性DuckDB v1.5.4SQLitePostgreSQLPandas
嵌入式部署✅ 单文件✅ 单文件❌ 需要服务✅ 内存
SQL 支持完整 ANSI SQL基础 SQL完整 SQL
Parquet 原生支持⚠️ 需转换
JSON 通配符✅ 增强⚠️ 部分
并行查询✅ 自动✅ 手动
内存效率列式存储行式存储行式存储行式存储
空间查询✅ spatial 扩展✅ PostGIS
ADBC 支持✅ 1.1.0⚠️ 社区驱动

升级建议

何时升级

  • 正在使用 JSON 处理:通配符路径修复和数组 JSON 转换将显著提升开发体验
  • 处理 Parquet 数据:原生几何统计剪枝可大幅加速空间查询
  • 需要 ADBC 兼容性:完整实现 1.1.0 规范确保与其他 Arrow 工具的互操作性
  • 生产环境稳定性:100+ 个 bug 修复提升了整体稳定性

升级步骤

# Linux/Mac 快速升级
curl -Ls https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip -o duckdb.zip
unzip -o duckdb.zip
chmod +x duckdb

# Python 升级
pip install --upgrade duckdb

# Docker 使用
docker pull duckdb/duckdb:v1.5.4

变现建议

数据产品机会

  1. JSON 数据分析 SaaS:利用 v1.5.4 增强的 JSON 处理能力,构建面向电商、日志分析等领域的 SaaS 产品。例如,为跨境电商平台提供商品评论的 JSON 结构化分析服务。

  2. 空间数据可视化平台:结合 Parquet 原生几何统计剪枝,构建高性能的空间数据分析平台,服务于物流优化、房地产分析等行业。

  3. 实时数据管道:利用 ADBC 1.1.0 的富错误元数据 API,构建更健壮的实时数据管道,为金融、物联网等领域提供可靠的数据集成服务。

成本节约

  • 替代传统 BI 工具:DuckDB 的嵌入式架构可将 BI 分析基础设施成本降低 60-80%
  • 减少 ETL 复杂度:原生 Parquet/JSON 支持可减少数据转换层,降低运维成本
  • 提升查询效率:相比 Pandas 等内存计算方案,DuckDB 在处理 GB 级数据时可节省 50% 以上的内存使用

商业化路径

阶段策略预期收益
短期开源工具链 + 技术支持建立行业影响力
中期垂直行业解决方案$10K-50K/月
长期企业级数据平台$100K+/月

总结

DuckDB v1.5.4 是一个重要的维护版本,在保持 DuckDB 一贯的简洁高效的同时,显著增强了 JSON 处理、Parquet 优化和 ADBC 兼容性。对于任何正在使用或考虑使用 DuckDB 的团队来说,升级到 v1.5.4 都是值得推荐的选择。

访问 DuckDB 官网 获取更多信息,或查阅 v1.5.4 发布公告 了解更多技术细节。

架构图

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计

⚠️ 本站为独立社区项目,与 DuckDB 基金会及 DuckDB 官方项目无任何从属、背书或赞助关系。

"DuckDB" 是 DuckDB 基金会的注册商标,本站仅以事实描述方式使用该名称。

本站内容仅供教育与社区推广用途,不构成任何商业服务。