Featured image of post DuckDB v1.5.4 发布:ADBC 1.1.0 支持、Avro 扩展与 Unity Catalog 集成

DuckDB v1.5.4 发布:ADBC 1.1.0 支持、Avro 扩展与 Unity Catalog 集成

DuckDB v1.5.4 正式推出,带来 ADBC 1.1.0 协议支持、Avro 和 Unity Catalog 扩展、MERGE INTO 重大改进以及多项关键 Bug 修复。全面解析新版本特性与实战应用。

概述

2026 年 6 月 17 日,DuckDB 官方发布了 v1.5.4 错误修复版本。这是继 v1.5.3 之后不到一个月的又一重要补丁版本,修复了大量社区反馈的问题,并带来了几个重量级的新特性。

本次更新最引人注目的包括:ADBC 1.1.0 协议的完整支持(含 Rich Error Metadata API)、Avro 和 Unity Catalog 扩展的正式纳入MERGE INTO 语句的行为修正,以及对 Vortex 和 Lance 扩展的版本升级。此外,还有数十项 Bug 修复,涵盖了从内存泄漏到并发安全的各个层面。

DuckDB v1.5.4 架构概览

ADBC 1.1.0 支持:数据库连接的标准化之路

什么是 ADBC?

Arrow Database Connectivity (ADBC) 是 Apache Arrow 项目推出的数据库连接标准 API,旨在为不同数据库提供统一的驱动接口。它让应用程序可以通过相同的代码访问 PostgreSQL、MySQL、DuckDB 等多种数据源,极大简化了数据管道的开发。

v1.5.4 带来的改进

v1.5.4 版本中,ADBC 驱动实现了两个关键特性:

  1. StatementExecuteSchema:支持在执行查询前获取结果集的元数据信息,无需实际执行即可了解返回的列名、类型等信息。
  2. Rich Error Metadata API:当查询失败时,ADBC 现在能够返回更详细的错误上下文信息,包括具体的错误位置、相关 SQL 片段等,大幅提升了调试效率。

实战示例

-- 通过 ADBC 驱动连接 DuckDB 并获取 schema 信息
-- 在 Python 中使用 adbc_driver_manager

import adbc_driver_manager.dbapi as dbapi
import adbc_driver_duckdb.dbapi

# 建立连接
with dbapi.connect(
    "duckdb://",
    driver_name="adbc_driver_duckdb",
) as conn:
    with conn.cursor() as cursor:
        # 执行查询
        cursor.execute("SELECT 'Hello DuckDB v1.5.4' AS greeting")
        result = cursor.fetch_arrow_table()
        print(result)

对于使用 ADBC 的数据应用开发者来说,这意味着可以在不修改查询逻辑的前提下,无缝切换底层数据库引擎。

Avro 扩展:Apache Avro 格式的完整支持

Avro 是什么?

Apache Avro 是一种流行的二进制序列化框架,广泛应用于 Hadoop 生态系统和数据管道中。它以紧凑的二进制格式存储数据,同时保留完整的 schema 信息,非常适合大规模数据存储和传输。

DuckDB 中的 Avro 读取

v1.5.4 版本中,Avro 扩展被正式纳入 DuckDB 的扩展列表中。你可以直接使用 read_avro() 函数读取 .avro 文件:

-- 读取 Avro 文件
SELECT * FROM read_avro('data/records.avro');

-- 查看 Avro 文件的 schema 信息
DESCRIBE SELECT * FROM read_avro('data/records.avro');

-- 结合其他文件格式一起处理
SELECT 
    avro_data.customer_id,
    csv_data.order_total,
    avro_data.timestamp
FROM read_avro('orders.avro') avro_data
JOIN read_csv_auto('customers.csv') csv_data
ON avro_data.customer_id = csv_data.id;

与 Parquet 的性能对比

特性AvroParquetDuckDB 支持
压缩比
列式存储
Schema 演化
随机读取
适用场景流式写入分析查询两者兼有

对于需要从 Hadoop 生态系统迁移数据的用户,Avro 扩展让 DuckDB 可以直接消费现有的 Avro 数据文件,无需额外的格式转换步骤。

Unity Catalog 扩展:Databricks 数据治理集成

什么是 Unity Catalog?

Unity Catalog 是 Databricks 平台提供的统一数据治理解决方案,支持跨工作区的权限管理、元数据管理和审计追踪。通过 DuckDB 的 Unity Catalog 扩展,你可以在本地环境中直接查询 Unity Catalog 管理的 Delta Lake 表。

使用方式

-- 挂载 Unity Catalog 数据源
ATTACH 'unity://catalog' AS uc (TYPE unity_catalog);

-- 列出可用的 schema
SHOW SCHEMAS FROM uc;

-- 查询 Unity Catalog 管理的表
SELECT * FROM uc.default.my_table LIMIT 10;

-- 跨 catalog 查询
SELECT 
    t.product_name,
    SUM(t.amount) as total_sales
FROM uc.production.sales t
GROUP BY t.product_name
ORDER BY total_sales DESC;

适用场景

  • 数据湖分析:直接在本地对 Databricks 数据湖进行即席查询
  • 混合架构:结合 DuckDB 的分析能力和 Unity Catalog 的治理功能
  • 原型开发:在开发阶段使用本地 DuckDB 模拟生产环境的数据访问

MERGE INTO 的重大行为修正

v1.5.4 对 MERGE INTO 语句进行了重要的语义修正,解决了长期以来困扰用户的绑定歧义问题。

问题描述

在之前的版本中,当 MERGE INTO 语句包含 WHEN NOT MATCHED 子句时,DuckDB 可能会错误地在条件绑定中引入源表的列,导致意外的过滤行为或性能问题。

修正内容

-- 修正后的 MERGE INTO 语义:
-- WHEN NOT MATCHED 只考虑目标表
-- WHEN NOT MATCHED BY TARGET 只考虑源表

MERGE INTO target_table t
USING source_table s
ON t.id = s.id
WHEN MATCHED THEN
    UPDATE SET t.value = s.value
WHEN NOT MATCHED THEN
    INSERT (id, value) VALUES (s.id, s.value);

这一修正确保了 MERGE INTO 的行为与 SQL 标准完全一致,特别是在复杂的多表关联场景中。

其他关键更新

Vortex 和 Lance 扩展升级

v1.5.4 版本升级了 Vortex(DuckDB 的原生向量索引格式)和 Lance(开源机器学习数据格式)扩展,带来了更好的查询性能和更稳定的并发控制。

-- 使用 Vortex 向量索引加速相似度搜索
SELECT 
    id,
    vector_cosine_similarity(embedding, '[1.0, 2.0, 3.0]') as similarity
FROM read_vortex('vectors.vortex')
ORDER BY similarity DESC
LIMIT 10;

存储版本更新

v1.5.4 引入了新的存储版本映射,确保与 v1.4.5 版本的向后兼容性。这意味着从旧版本升级的用户不需要手动迁移数据文件。

其他 Bug 修复亮点

  • 修复了 Arrow GeoArrow CRS 序列化中的双重释放和内存泄漏
  • 修正了窗口函数自连接优化器的异常处理
  • 改进了进度条输出,修复了管道模式下 SQL 执行的崩溃问题
  • 修复了 Parquet Thrift 字节序问题
  • 优化了准备语句参数查找性能

版本对比

特性v1.5.3v1.5.4
ADBC 支持基础1.1.0 + Rich Error API
Avro 扩展✅ 正式纳入
Unity Catalog✅ 正式纳入
MERGE INTO基础绑定语义修正
Vortex基础版升级优化
Lance基础版升级优化
Bug 修复常规30+ 项

如何升级

通过 pip 升级

pip install --upgrade duckdb

通过 apt 升级(Linux)

wget https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip
unzip duckdb_cli-linux-amd64.zip
chmod +x duckdb
./duckdb --version

在 Python 项目中升级

import duckdb
print(duckdb.__version__)  # 应显示 1.5.4

变现建议

对于希望利用 DuckDB v1.5.4 新特性创造商业价值的团队和个人,以下是几个方向:

1. 数据管道咨询服务

Avro 和 Unity Catalog 扩展让 DuckDB 能够无缝对接 Hadoop 和 Databricks 生态。企业数据团队经常面临遗留系统与现代化分析平台的集成难题,提供基于 DuckDB 的迁移咨询服务(单次项目 ¥10,000-50,000)是一个高价值方向。

2. ADBC 驱动的 SaaS 产品

ADBC 1.1.0 的支持让多数据源统一查询变得更容易。可以构建一个 SaaS 产品,让用户通过统一的 SQL 接口查询多个数据源(DuckDB + PostgreSQL + MySQL),按月收取订阅费用(¥200-2000/月)。

3. 数据分析培训与认证

围绕 DuckDB 新版本特性开设在线培训课程,特别是针对 Avro 数据处理、Unity Catalog 集成、ADBC 应用等新兴主题。课程定价 ¥299-1999,配合实战项目作业,完课率和口碑传播效果良好。

4. 企业级数据治理方案

结合 Unity Catalog 扩展和 DuckDB 的分析能力,为企业搭建轻量级数据治理平台。相比传统方案,基于 DuckDB 的方案部署成本降低 80%,查询性能提升 10 倍以上。

总结:DuckDB v1.5.4 虽然是一个错误修复版本,但引入的 ADBC 1.1.0 支持、Avro 和 Unity Catalog 扩展使其成为一个功能丰富的里程碑版本。无论是数据工程师、分析师还是开发者,都值得升级到最新版本以享受这些新特性带来的便利。

📺 Watch video tutorials → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计

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

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

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