博客

Databend 4-5 月双月报:从 ASOF JOIN 到行级安全,能力走向成熟

avatarDatabendLabs6月 3, 2026
Databend 4-5 月双月报:从 ASOF JOIN 到行级安全,能力走向成熟

Hi,Databend 的朋友们!

这一期我们把 2026 年 4 月 和 2026 年 5 月 合并成一篇双月回顾,覆盖从 v1.2.892-nightly 到 v1.2.914-nightly,以及 4 月发布的稳定版 v1.2.881。

这两个月的关键词是「打磨」:ASOF JOIN、空间索引、行级安全、密钥对认证这些方向都在往「更完整、更快、更安全」推进,100 项修复也印证了对成熟度的持续投入。

月度数据

从 v1.2.892-nightly 到 v1.2.914-nightly,加上 4 月发布的稳定版 v1.2.881,Databend 主仓库在 2026 年 4-5 月累计发布了:

  • 23 个 nightly 版本
  • 1 个 stable 版本(v1.2.881)
  • 2 个 patch 版本

其中:

  • 4 月共发布 13 个 nightly 和 1 个 stable
  • 5 月共发布 10 个 nightly 和 2 个 patch

如果按 release note 统计,这两个月主仓库累计合并了约 219 项改动

  • 49 个新功能
  • 100 个 bug 修复
  • 34 项重构
  • 13 项 CI / 构建改进
  • 20 项其他维护
  • 2 项文档更新 与 1 份 RFC

从这个数据也能看出来,4-5 月的 Databend 是在功能扩展、执行稳定性和底层结构整理三条线上同步推进,修复量(100)占了大头,说明这一阶段在打磨已有能力的成熟度。

本期亮点

核心新功能

  • ASOF JOIN 全面增强 —— 支持 USING 简化语法、补齐 FULL OUTER ASOF JOIN,并对带等值键的 ASOF JOIN 增加 hash fast path 专门提速,时序「按最近匹配」连接更好写也更快。
  • 行访问策略下推 —— Row Access Policy 谓词下推至 prewhere,在存储层完成剪枝,让行级安全策略既严格又不拖慢查询。
  • 密钥对认证 —— 用户可使用密钥对登录,并扩展支持 RS384、RS512 签名算法,适配更严格的企业认证要求。
  • 空间索引剪枝 —— ST_DWITHIN、ST_COVERS、ST_COVEREDBY 开始接入空间索引,邻近与覆盖查询走索引剪枝。
  • 日期时间函数扩展 —— 新增 DATE_FROM_PARTS、TIMESTAMP_FROM_PARTS、TIMESTAMP_TZ_FROM_PARTS,支持 ISO 8601 时长与 AUTO datetime 格式自动探测。

查询性能与执行引擎:从 Pipeline 异步化到 Spill 内存池

这两个月执行引擎的主线是「不阻塞」与「可控」:

  • Pipeline 异步化 —— 把 pipeline 接口改造成异步模式,避免阻塞 Tokio 运行时,是执行链路上的一次重要结构调整。
  • Spill 内存池可配置 —— 从 SpillsBufferPool 中抽出独立的 MemoryPool,并让 pool 大小按 session 可配置;同时默认把 query memory limit 设为 max 的一半并在 OOM 时启用 spilling,大查询的内存稳定性明显提升。
  • 选择率与统计估计 —— 改进基于 histogram 的选择率与 join 统计估计、join 后重建 join key histogram,优化器对数据分布的判断更准。
  • 公共子计划消除 —— improve common subplan elimination,减少重复计算。

空间分析:从函数扩充走向索引剪枝

延续上一阶段引入 R-Tree Spatial Index 的节奏,这两个月空间分析的重点是让索引真正参与查询剪枝

  • 新增一批 Geometry 标量函数 与聚合函数,几何计算能力继续补齐。
  • 支持空间索引刷新(REFRESH ... SPATIAL INDEX),索引可随数据更新。
  • ST_DWITHIN 邻近查询、ST_COVERS / ST_COVEREDBY 覆盖判断开始借助空间索引做剪枝。
  • 查询结果支持以 Arrow 格式返回格式化的地理值,方便下游消费。
-- 找出指定点 2.0 范围内的兴趣点,自动走空间索引剪枝
SELECT name
FROM pois
WHERE st_dwithin(location, to_geometry('POINT(116.40 39.90)'), 2.0);

安全与治理:密钥对认证与行级安全下推

安全是这两个月另一条清晰的主线。

密钥对认证让用户可以用密钥对替代密码登录,并把签名算法扩展到 RS384、RS512,更贴合企业的密钥管理与合规要求。

行访问策略下推则让行级安全策略的谓词被下推到 prewhere,在存储层就完成剪枝,避免「先全表扫描再过滤」的性能损耗。同时新增 RAP definition cache、统一 security policy cache 的 dialect key,权限链路更快也更可靠。

文件格式与数据加载:NDJSON、CSV/TEXT 持续增强

  • NDJSON:支持 COPY 时的 Schema 演进、按字段名解析 tuple 字段,解析改用 from_slice 提升性能。
  • CSV / TEXT:新增 trim_space 去除字段首尾空白,支持指定 encoding 编码处理非 UTF-8 数据。
  • HTTP Arrow 协商:协议层协商 Arrow result format 版本、把 variant JSONB 编码为 JSON,客户端兼容性更好。
COPY INTO events
FROM @stage/events.csv
FILE_FORMAT = (TYPE = CSV, TRIM_SPACE = true, ENCODING = 'gbk');

函数与表达能力

这两个月新增了一批实用函数:

  • 日期时间构造:DATE_FROM_PARTS、TIMESTAMP_FROM_PARTS、TIMESTAMP_TZ_FROM_PARTS,从年月日时分秒直接拼出时间值。
  • 进制转换:CONV,在任意进制间转换数字。
  • ISO 8601 时长:支持 P1Y2M3DT4H5M6S 这类标准间隔字面量。
  • VARIANT 数组拼接:array_concat 支持 VARIANT 数组。
  • 会话角色判断:is_role_in_session。
SELECT DATE_FROM_PARTS(2026, 5, 31);   -- 2026-05-31
SELECT CONV('FF', 16, 2);              -- 11111111

存储与表管理

  • Parquet 写入调优:新增 data_page_rows / data_page_bytes 表选项控制数据页粒度,支持按列设置 STATS_TRUNCATE_LEN 控制字符串统计信息长度。
  • 快照标签:新增 fuse_tag 表函数列出快照标签。
  • 聚簇增强:聚簇统计中新增 block 深度指标,并改进分布式 recluster 的任务调度。
  • OSS 连接:支持以 role_arn 方式访问阿里云 OSS。
  • 新增 fuse_block_statistics 与 billing_usage_daily 表函数,便于排查块级统计与日度计费用量。

Meta 与运维:底层结构持续整理

  • 表锁实现:Meta 改用 PutSequential 实现表锁,锁语义更清晰。
  • Key 类型迁移:把 kvapi key 类型迁移到独立的 structkey crate,移除 legacy meta primitive id 与 raw u64 value decoder,类型边界更清晰。
  • 运行时可观测性:新增运行时看门狗任务转储(runtime watchdog task dumps),卡死时可自动抓取任务栈帮助定位。
  • 依赖升级:升级 arrow-rs 到 58.1.0、openraft alpha.18,并持续 bump databend-meta 版本栈。

稳定性与质量

这两个月累计合并了 100 个 bug 修复,是最近几期中修复占比明显偏高的一期,主要集中在几个方向:

  • 执行正确性 —— 修复 hash join hashtable 中因 assume UB 导致的 crash、INSERT ALL 在 lazy materialization 重排输出时的列顺序问题、window aggregate 结果物化问题、union 与 limit 的 hang。
  • Spill 与并发 —— 修复 exchange sink buffer 关闭时的 permit 泄漏、hash join spill 在 SSE4.2 下的 partition bit 提取、在统计 sender 关闭时避免阻塞。
  • SQL 边界修复 —— 允许 range / PROPERTIES 作为标识符、SELECT alias 解析按 clause 区分、group by alias shadowing、correlated subqueries over union、negative factorial 输入拒绝等。
  • 存储与裁剪 —— 修复用字符串字面量裁剪整数列、bloom-index 字符串整数 probe 转换、ORDER BY LIMIT 下推与 fuse table function 索引错位。
  • 函数边界 —— 修复 regexp_instr position 溢出、sub_bitmap offset 超出基数、反三角函数 NaN 定义域、BitmapReader 的 BITMAP_LENGTH 从 1024 修正为 8192。

实战演示:行级安全 + 时序匹配

把这两个月的能力放到一个贴近真实工作的例子里会更直观。设想一个多租户的交易分析场景:每个分析师只能看到自己部门的数据(行级安全),并且要为每笔交易匹配当时最新的市场报价(时序连接)。

第一步:用行访问策略做行级隔离

-- 定义一条行访问策略:按会话角色限定可见部门
CREATE ROW ACCESS POLICY dept_isolation
AS (dept STRING)
RETURNS BOOLEAN ->
    dept = current_role();

ALTER TABLE trades
ADD ROW ACCESS POLICY dept_isolation ON (dept);

启用后,策略谓词会被下推到 prewhere,在存储层就完成部门剪枝——既保证分析师只读到自己的数据,又不会因为「先全表扫描再过滤」而损失性能。

第二步:用 ASOF JOIN 匹配最近报价

Databend 的 ASOF JOIN 采用 DuckDB 风格,不等式条件直接写进 ON;若两表列名一致,也可用 USING(列表中最后一列作为对齐列):

-- 为每笔交易匹配该时刻 <= 的最近一条报价
SELECT
  t.trade_id,
  t.symbol,
  t.ts,
  t.qty,
  q.price AS last_quote
FROM trades t
ASOF JOIN quotes q
  ON t.symbol = q.symbol AND t.ts >= q.ts;

两步叠加,行级安全策略在底层默默生效,时序匹配则用一行 ASOF JOIN 表达,原本需要窗口函数 + 自连接的复杂逻辑被大幅简化。

生态补充

除了主仓库,Databend 生态里的客户端与驱动在 4-5 月也有配套更新。

bendsql

bendsql 在这两个月发布了两个版本:

  • v0.33.7(2026-04-07):错误信息中补充版本号,支持更多 DSN scheme 与 presign host,并升级 jsonb 依赖。
  • v0.34.0(2026-05-18):新增 server-side 参数绑定本地嵌入式 Python 连接支持,协商 arrow_result_version,地理类型可映射为 string 或 binary,并完善 PUT/GET 的 stage 路径处理。

这两次发布偏向 CLI 可用性、Arrow 互操作与本地嵌入式分析的增强。

Driver 与客户端

  • databend-go 在 2026-05-09 发布 v0.9.3,新增 HTTP Arrow 传输、登录认证、二进制类型与可配置 User-Agent,并按 geometry_output_format 返回地理值。
  • databend-jdbc 在 2026-04 前后发布 v0.4.5 / v0.4.6,修复 extractColumnTypes 的 SQL 解析问题,以及大文件 presign 上传时的 ClosedChannelException。

这些更新虽然不像主仓库那样集中在大功能上,但对 Databend 在应用接入层的可用性同样重要。

结语

4-5 月的 Databend,关键词是「打磨」:ASOF JOIN、空间索引、行级安全、密钥对认证这些已有方向都在往「更完整、更快、更安全」推进,100 项修复也印证了对成熟度的持续投入。

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式湖仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:https://databend.cn

📖 Databend 文档:https://docs.databend.cn

💻 Wechat:Databend

✨ GitHub:https://github.com/databendlabs/databend

分享本篇文章

订阅我们的新闻简报

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