亲爱的 Databend 用户朋友们,大家好!👋
九月我们把重点放在了生产环境真正需要的功能上。这个月上线了行级访问控制、Check 约束、AUTOINCREMENT 自增列、基于事务的表名交换 (SWAP),还有智能的 SQL 错误提示。这些都是企业用户一直在等的功能。
本月数据
15+ 个新功能,30+ 个 bug 修复,15+ 项性能优化,还有 10+ 项其他改进。最值得说的:安全管控更严了、数据校验更方便了、大结果集也不怕了。
本月亮点
🔥 重磅功能
-
行级访问策略
- 多租户数据隔离,统计信息自动加密
-
AUTOINCREMENT
- 自增 ID,不用手动管 Sequence 了
-
Check 约束
- 在表结构里直接定义数据规则
-
SQL 智能纠错
- 打错命令给你提示
🛠 好用的功能
-
表交换 (SWAP)
- 单事务原子交换表名,大表改结构零停机
-
Pivot 增强
- Pivot 可以用任意表达式排序了
-
存储过程权限
- 可以单独给存储过程授权了
-
Sequence 增强
- 可以自定义起始值和步长
⚡ 性能优化
-
虚拟列写入加速
- JSON 数据导入更快
-
Meta 快照优化
- 集群同步效率提升
-
Join 内存优化
- 大表 Join 不那么吃内存了
-
分布式 Recluster
- 表维护速度更快
🐛 修复的问题
-
30+ 个 bug
- 查询、事务、meta 服务都有涉及
-
结果集溢出
- 修了 nullable 数据丢失的问题
-
Vacuum 改进
- 删表后清理更彻底
-
事务可靠性
- 存储过程里的 DDL 现在会正确提交了
核心功能详解
🔐 行级访问策略
做多租户 SaaS 最头疼的就是数据隔离。现在有了行级策略,一次定义,到处生效。
-- 定义策略:每个租户只能看自己的数据
CREATEROWACCESSPOLICY tenant_isolation AS (tenant_id INT)
RETURNSBOOLEAN -> tenant_id = CURRENT_TENANT();
-- 加到表上
ALTERTABLE customer_data
ADDROWACCESSPOLICY tenant_isolation(tenant_id);
-- 以后所有查询都自动过滤
SELECT * FROM customer_data;
-- 用户只能看到自己租户的数据,想越权都不行
有啥好处:
- 应用层不用管过滤逻辑,数据库层面自动拦截
- 统计信息也会自动加密,防止通过 EXPLAIN 看到别人的数据
- GDPR、HIPAA 这些合规要求,轻松搞定
🎯 AUTOINCREMENT
以前要自增 ID,得先建 Sequence,再在表里 NEXTVAL,删表还得记得删 Sequence。现在不用了。
以前的写法:
CREATE SEQUENCE user_id_seq START 1 INCREMENT 1;
CREATE TABLE users (id INT DEFAULT NEXTVAL('user_id_seq'), name VARCHAR);
-- 删表时还得记得删 Sequence,容易忘
现在这样写:
CREATE TABLE users (
id INT AUTOINCREMENT,
name VARCHAR,
email VARCHAR
);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- ID 自动从 0 开始:0, 1, 2...
各种灵活的用法:
-- 最简单的
id INT AUTOINCREMENT
-- 从 1000 开始,每次加 10
order_id INT AUTOINCREMENT (1000, 10) -- 1000, 1010, 1020...
-- MySQL 风格的写法也支持
invoice_id INT IDENTITY START1000INCREMENT10
-- 一张表可以有多个自增列
CREATETABLEevents (
event_id INT AUTOINCREMENT,
sequence_num INT AUTOINCREMENT,
dataVARCHAR
);
好处显而易见:
- Sequence 跟着表走,建表自动建,删表自动删
- MySQL、PostgreSQL、Snowflake 的写法都兼容
- 不会留下孤儿 Sequence,省心
✅ Check 约束
数据校验以前都写在应用里,容易漏。现在可以直接写到表结构上。
CREATE TABLE products (
idINT AUTOINCREMENT,
nameVARCHARNOTNULL,
price DECIMAL(10,2),
discount_percent INT,
stock INT,
CONSTRAINT price_valid CHECK (price > 0),
CONSTRAINT discount_range CHECK (discount_percent BETWEEN0AND100),
CONSTRAINT stock_non_negative CHECK (stock >= 0)
);
-- 正常数据,没问题
INSERTINTO products (name, price, discount_percent, stock)
VALUES ('Widget', 59.99, 10, 100);
-- 不符合规则的数据,直接拒绝
INSERTINTO products (name, price, discount_percent, stock)
VALUES ('Gadget', -10.00, 150, -5);
-- Error: CHECK constraint failed
有啥用:
- 数据验证在数据库层面搞定,应用层不用操心
- 后续可以用 调整规则
ALTER TABLE ADD/DROP CONSTRAINT
- 想看有哪些约束,查 就行
system.constraints
🔄 表交换 SWAP
单事务原子交换两个表名,解决大表结构变更的对业务的影响的问题。
痛点:
-- 传统方法:两步 RENAME 中间有间隙
ALTER TABLE orders RENAME TO orders_backup; -- 第 1 步
ALTER TABLE orders_v2 RENAME TO orders; -- 第 2 步
-- ⚠️ 这两步之间 orders 不存在,应用查询会失败
解决方案:
-- 1. 创建新结构的表
CREATETABLE orders_v2 (
order_id INT,
user_id INT,
amount DECIMAL(10,2),
created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP, -- 新增列
statusVARCHARDEFAULT'pending' -- 新增列
);
-- 2. 离线迁移数据
INSERTINTO orders_v2 SELECT *, CURRENT_TIMESTAMP, 'completed'FROM orders;
-- 3. 单事务内原子交换
ALTERTABLE orders SWAP WITH orders_v2;
-- ✓ orders 和 orders_v2 在同一事务内互换名字
-- ✓ 应用全程可以访问 orders,零停机
适用场景:
- 大表添加/删除列
- 表结构重构
- 数据类型变更
- 分区策略调整
📝 SQL 智能纠错
打错命令的时候,现在会给你提示了。
SHOW TABLE;
-- 以前:"unexpected TABLE, expecting STATUS, TABLES..."
-- 现在:"Did you mean SHOW TABLES or SHOW TABLE FUNCTIONS?"
VACUUM TEMPARE FILES;
-- 提示:"Did you mean VACUUM TEMPORARY FILES?"
实用:
- 打错了会告诉你可能想输入什么
- 错误信息更友好,调试更快
- 支持拼写错误和不完整的命令
其他改进
📊 查询优化
-
Pivot 排序
- Pivot 现在可以用任意表达式排序了
-
CTE 优化
- 公共表表达式的物化逻辑更智能
-
运行时过滤
- Join 的时候谓词下推更激进,速度更快
🔧 运维
-
分布式 Recluster
- 表维护的并行度更高
-
Vacuum 改进
- 清理删除表和历史快照更彻底
🛠 Meta 服务
-
快照协议升级
- V004 版本,集群状态同步更快
-
可观测性
- 日志和监控指标更详细
九月的主题就是生产可用。 行级安全、数据校验、自增列、大结果集处理,这些都是企业用户天天要用的功能。Databend 在保持云原生架构的同时,功能完整度越来越接近企业级数据库。
多租户 SaaS 有了数据隔离。DBA 有了声明式约束。应用有了自增 ID。大查询也不怕 OOM 了。实实在在解决生产问题。
关于 Databend
Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式湖仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
👨💻 Databend Cloud:https://databend.cn
📖 Databend 文档:https://docs.databend.cn
💻 Wechat:Databend
✨ GitHub:https://github.com/databendlabs/databend
订阅我们的新闻简报
及时了解功能发布、产品规划、支持服务和云服务的最新信息!