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 — 支持 ,全面覆盖 Geometry/Geography 负载,大幅提升空间查询性能。
CREATE/DROP SPATIAL INDEX - 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或复杂的 ETL 操作。无论 Agent 把这个分支改得多么面目全非,主表(Main Table)的数据都毫发无损。UPDATE - 验证与合并:当 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 元代金券。
分享本篇文章
订阅我们的新闻简报
及时了解功能发布、产品规划、支持服务和云服务的最新信息!






