---
title: 'Databend 4-5 月双月报：从 ASOF JOIN 到行级安全，能力走向成熟'
date: 2026-06-03
slug: category-product/monthly-apr-may-2026
cover_url: '202605/monthly.png'
description: '这一期我们把 2026 年 4 月 和 2026 年 5 月 合并成一篇双月回顾，覆盖从 v1.2.892-nightly 到 v1.2.914-nightly，以及 4 月发布的稳定版 v1.2.881。这两个月的关键词是「打磨」：ASOF JOIN、空间索引、行级安全、密钥对认证这些方向都在往「更完整、更快、更安全」推进，100 项修复也印证了对成熟度的持续投入。'
tags: [databend, monthly]
category: product
authors:
  - DatabendLabs
---

Hi，Databend 的朋友们！

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

{/* truncate */}

这两个月的关键词是「打磨」：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 格式返回格式化的地理值，方便下游消费。

```sql
-- 找出指定点 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。

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

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

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

```sql
-- 定义一条行访问策略：按会话角色限定可见部门
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（列表中最后一列作为对齐列）：

```sql
-- 为每笔交易匹配该时刻 <= 的最近一条报价
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
