Hello,大家好,我是漩涡,现在由我代表 Databend 社区宣布 v0.8 版本的正式发布。
Databend v0.8 的开发于 3 月 28 号开始,总计 5000+ commits,4600+ 文件变更。在过去的 5 个月中,社区的 120 余位贡献者新增了 42 W 行代码,删除了 16 W 行,相当于把 Databend 重写了一遍。在该版本中,社区对 SQL Planner 框架做出了重大改进,并将所有的 SQL 语句都迁移到了新的 Planner 上,提供了完整的 JOIN 和子查询支持。
现在就下载最新版本
https://github.com/datafuselabs/databend/releases/tag/v0.8.0-nightly
接下来就让我们看看 v0.8 都做了什么吧~
Databend 是一个基于 Rust 开发的现代化云数据仓库,致力于实现高性能可弹性扩展的实时数据分析,激活用户的数据潜能。
为了更好的支持复杂的 SQL 查询和提升用户体验,Databend v0.8 设计了全新的 Planner 框架。在 New Planner 的驱动下,Databend 增加了 JOIN 和高效的子查询支持,所有的子查询在进入 runtime 之前已经完全被 decorrelation:
select vip_info.Client_ID, vip_info.Region from vip_info right join purchase_records on vip_info.Client_ID = purchase_records.Client_ID;
在重构 Planner 的同时,Databend 社区基于 nom 和 partt 实现了兼顾开发效率与用户体验的全新 Parser。
新的 Parser 让开发者以直观的方式轻松的设计/开发/测试复杂的 SQL 语法
COPY ~ INTO ~ #copy_unit ~ FROM ~ #copy_unit ~ ( FILES ~ "=" ~ "(" ~ #comma_separated_list0(literal_string) ~ ")")? ~ ( PATTERN ~ "=" ~ #literal_string)? ~ ( FILE_FORMAT ~ "=" ~ #options)? ~ ( VALIDATION_MODE ~ "=" ~ #literal_string)? ~ ( SIZE_LIMIT ~ "=" ~ #literal_u64)?
同时能给予用户具体而精准的报错信息:
MySQL [(none)]> select number from numbers(10) as t inner join numbers(30) as t1 using(number); ERROR 1105 (HY000): Code: 1065, displayText = error: --> SQL:1:8 | 1 | select number from numbers(10) as t inner join numbers(30) as t1 using(number) | ^^^^^^ column reference is ambiguous
再也不用担心不知道 SQL 哪里出错了。
访问 The New Databend SQL Planner 以了解更多细节
除了全新设计的 Planner 之外,Databend 社区还实现了众多新功能:
COPY 能力得到了极大强化,现在的 Databend 可以
COPY INTO ontime200 FROM 'https://repo.databend.rs/dataset/stateful/ontime_2006_[200-300].csv' FILE_FORMAT = (TYPE = 'CSV')
COPY INTO ontime200 FROM 's3://bucket/dataset/stateful/ontime.csv.gz' FILE_FORMAT = (TYPE = 'CSV' COMPRESSION=AUTO)
COPY INTO 'azblob://bucket/' FROM ontime200 FILE_FORMAT = (TYPE = 'PARQUET‘)
Databend v0.8 设计并开发了 Multi Catalog 并在此基础上实现了 Hive Metastore 的支持!现在 Databend 能够直接对接 Hive 并从 HDFS 上读取数据。
select * from hive.default.customer_p2 order by c_nation;
很久之前,Databend 社区分享过底层 FUSE Engine 的实现 From Git to Fuse Engine。其中一个非常重要的特性就是支持时间旅行,我们能够查询任何一个时间点的数据表。
从 v0.8 版本开始,这个功能被正式实装啦,现在我们可以
-- Travel to the time when the last row was inserted select * from demo at (TIMESTAMP => '2022-06-22 08:58:54.509008'::TIMESTAMP); +----------+ | c | +----------+ | batch1.1 | | batch1.2 | | batch2.1 | +----------+
DROP TABLE test; SELECT * FROM test; ERROR 1105 (HY000): Code: 1025, displayText = Unknown table 'test'. -- un-drop table UNDROP TABLE test; -- check SELECT * FROM test; +------+------+ | a | b | +------+------+ | 1 | a | +------+------+
让业务数据拥有更多保障!
CTE (Common Table Expression) 是 OLAP 业务中经常使用的功能,用来单个语句的执行范围内定义的临时结果集,只在查询期间有效,实现代码段的重复使用,提升可读性,更好的实现复杂的查询。Databend v0.8 在 New Planner 的基础上重新实现了 CTE,现在用户可以快乐的使用 WITH 来声明 CTE:
WITH customers_in_quebec AS (SELECT customername, city FROM customers WHERE province = 'Québec') SELECT customername FROM customers_in_quebec WHERE city = 'Montréal' ORDER BY customername;
除了上述提到的这些功能,Databend v0.8 还支持了 UDFs,增加了 DELETE 语句,进一步强化了半结构化数据类型的支持,更不必说大量的 SQL 语句改进和新方法的加入。感谢 Databend 社区的所有贡献者,没有你们就没有这里提到的所有新特性的诞生!质量提升
功能实现只不过是产品交付的第一环。在 Databend v0.8,社区引入了工程质量的概念,从用户,贡献者,社区三个维度来评估 Databend 的开发质量。
为了让用户能够放心地使用 Databend,社区在过去的三个月中增加了大量测试,撷取了来自 YDB 等充实 stateless 测试集,增加了 ontime,hits 等数据集的 stateful 测试,上线了 SQL Logic Test 对所有的接口进行覆盖测试,启用了 SQL Fuzz 测试来覆盖边界情况。
不仅如此,社区还上线了 Databend Perf 做 Databend 在生产环境的持续性能测试,用来及时发现意外的性能回退问题。
Databend 是一个大型的 Rust 项目,其构建时间饱受社区诟病。
为了改进这一问题,让贡献者舒心,社区上线了高配置,专门调优的 Self-hosted Runner 来执行 PR 的集成测试,启用了 Mergify,mold,dev-tools 等多项服务或工具来优化 CI 流程。
同时还发起了 Databend 项目结构调整的新规划,将原本巨大的 query crate 拆分为多个子 crate,尽可能避免改一行代码,check 执行五分钟的情形。
Databend 是开源社区的贡献者和参与者。在 v0.8 的开发过程中,Databend 社区确立了 Upstream First 的原则,积极跟进并采用最新的上游版本,反馈已知 BUG,贡献自己的补丁,开启了 Tracking issues of upstream first violation 来跟进最新的动态。
Databend 社区积极探索与其他开源项目的集成,目前已经实现了 Vector,sqlalchemy,clickhouse-driver 等第三方驱动的集成和支持。
Databend v0.8 是一个夯实基础的版本,我们有了全新的 Planner,能够更加轻松的去实现功能和进行优化。在 0.9 版本中,我们期望改进如下方面: