博客

Databend 1 月月报:Table Branching & Tag、空间索引上线

avatarDatabendLabs2月 4, 2026
Databend 1 月月报:Table Branching & Tag、空间索引上线

Hi,Databend 的朋友们!🚀

1 月,我们累计发布了 11 个 nightly 版本。本月的主线围绕 数据治理查询性能 持续推进:Table Branching / Tag 初步落地,为数据版本管理提供了强力支持;Spatial Index 全面覆盖 Geometry/Geography,空间分析能力更进一步;Iceberg 写入能力也正式打通。同时,查询引擎在 Self-join Elimination、Lazy Materialization、Fuse Parquet Prewhere 等方向继续提速,Meta 服务也完成了多轮升级与重构。

月度数据

从 v1.2.863-nightly 到 v1.2.873-nightly,我们累计合并了 33 个新功能31 个 bug 修复37 项重构3 项 CI/构建改进 以及 15 项体验优化

本月亮点

🔥 核心新功能

  • Table Branching & Tag (Experimental) — 分支 (Branch) 与标签 (Tag) DDL 完整落地,配套
    tag_references
    表函数,让数据治理与追踪变得更加简单高效。
  • Spatial Index — 支持
    CREATE/DROP SPATIAL INDEX
    ,全面覆盖 Geometry/Geography 负载,大幅提升空间查询性能。
  • Iceberg Write Support — 升级 iceberg-rust 至 v0.8.0,正式打通写入链路,增强开放数据湖生态兼容性。
  • Stage 与连接管理增强 — 支持
    ALTER STAGE
    、数据库级默认连接配置,
    system.stages
    SHOW STAGES
    信息更加完善。
  • Parquet 诊断工具 — 新增 Parquet page 检查表函数,为底层存储问题排查提供利器。

⚙️ 查询性能与引擎

  • Self-join Elimination + Constant Subquery Elimination — 智能减少重复计算与计划冗余,提升复杂查询效率。
  • Lazy Materialization across Joins — 优化外连接中的 NULL 处理并降低 IO 开销。
  • Fuse Parquet Prewhere + DataBlockVec — 实现更快的 Read 和更高效的块级切片。
  • 高性能 Bitmap 运算
    bitmap_count
    /
    bitmap_intersect
    处理无需反序列化,性能显著提升。
  • 实验性 Hash Join 路径 — 新增 Nested Loop Join 支持,完善 Join 策略覆盖。

🧩 半结构化与时区

  • Variant -> TimestampTz — 支持从 Variant 转换,且 Offset 支持秒级精度,时区信息处理更完整。
  • JSON 兼容性 — 统一 Nested-type Quoting 与 Variant Serialization,确保行为一致性。
  • 格式优化 — Binary IO 增强,CSV/TSV 小数输出自动去除尾零,数据导出更整洁。
  • 表函数增强 — 支持标量子查询作为参数,提升灵活性。

🛠️ Meta 与运维

  • Meta Observability — 新增请求时延直方图与连接 TTL 配置,监控指标更丰富。
  • KV API 升级 — 引入 KvList / KvGetMany gRPC API + List Limit,大幅提高元数据扫描效率。
  • Meta 运行时升级 — Openraft 升级与多项 Runtime 重构,提升集群稳定性。

🐛 稳定性与质量

  • 修复倒排索引对 JSON 数组的错误匹配,结果缓存对安全过滤器的 Key 处理更完整。
  • Hash Shuffle 使用完整 Join Key 避免数据倾斜,新增 Parquet Page 溢出保护。
  • 修复 Stage 删除/替换在 OSS 上的文件清理问题,解决 Stream Diff 别名与递归 CTE 边界问题。

核心功能详解:Table Branching & Tag (Data Agent 的完美沙箱)

为什么 Data Agent 需要 Table Branching?

在构建能够自主编写 SQL、执行数据清洗或进行复杂分析的 AI Agent 时,最大的挑战之一就是安全性。你肯定不希望 Agent 的一次错误尝试就弄脏或删除了生产数据。

Table Branching 为 Agent 提供了一个天然的数据沙箱。

  • 安全试错 (Sandbox for Agents):Agent 可以为任务创建一个临时的 Branch。在这个分支上,Agent 拥有完全的读写权限,可以自由地执行
    DELETE
    UPDATE
    或复杂的 ETL 操作。无论 Agent 把这个分支改得多么面目全非,主表(Main Table)的数据都毫发无损。
  • 验证与合并:当 Agent 在分支上的操作通过了验证(例如,生成的 SQL 执行结果符合预期,或者清洗后的数据质量达标),我们再考虑将其逻辑应用回主干。
  • 快照回溯 (Time Travel):配合 Tag 功能,我们可以为每一次成功的 Agent 任务打上标记,或者在 Agent 执行前建立快照,随时回滚。

这使得 Databend 不仅是一个高性能的数仓,更是一个 Agent-Ready Database

💡 实战演示

-- 如环境需开启实验功能,请执行:
SET enable_experimental_table_ref=1;

-- 1. 准备基础数据
CREATE OR REPLACE TABLE sales.orders(id INT, amount INT);
INSERT INTO sales.orders VALUES (1, 100), (2, 200);

-- 2. 创建 Branch 和 Tag
-- 创建一个名为 'dev' 的分支,用于开发测试
ALTER TABLE sales.orders CREATE BRANCH dev;
-- 创建一个名为 'v1_0' 的标签,作为数据里程碑
ALTER TABLE sales.orders CREATE TAG v1_0;

-- 3. 在 Branch 上进行修改(不会影响主表和 Tag)
INSERT INTO sales.orders/dev VALUES (3, 300);

-- 4. 验证数据隔离
SELECT * FROM sales.orders ORDER BY id; -- 主表:1, 2
SELECT * FROM sales.orders/v1_0 ORDER BY id; -- Tag v1_0:1, 2 (只读)
SELECT * FROM sales.orders/dev ORDER BY id; -- Branch dev:1, 2, 3 (包含新数据)

-- 5. 高级用法:基于现有 Ref 派生
-- 基于 dev 分支创建一个新的 qa 分支,并设置 7 天保留期
ALTER TABLE sales.orders CREATE BRANCH qa AT (BRANCH => dev) RETAIN 7 DAYS;
-- 基于 v1_0 标签做一个备份
ALTER TABLE sales.orders CREATE TAG v1_0_copy AT (TAG => v1_0);

准备好体验 Table Branching 与空间索引了吗?

开始使用 Databend Cloud——面向分析、搜索、AI 与 Python Sandbox 的 Agent Ready 数仓,即可开始,获得 200 元代金券。

分享本篇文章

订阅我们的新闻简报

及时了解功能发布、产品规划、支持服务和云服务的最新信息!