• Databend v0.8 新版本上线!


    ​Hello,大家好,我是漩涡,现在由我代表 Databend 社区宣布 v0.8 版本的正式发布。

    Databend v0.8 的开发于 3 月 28 号开始,总计 5000+ commits,4600+ 文件变更。在过去的 5 个月中,社区的 120 余位贡献者新增了 42 W 行代码,删除了 16 W 行,相当于把 Databend 重写了一遍。在该版本中,社区对 SQL Planner 框架做出了重大改进,并将所有的 SQL 语句都迁移到了新的 Planner 上,提供了完整的 JOIN 和子查询支持。

    现在就下载最新版本

    Release v0.8.0-nightly · datafuselabs/databend · GitHub

    接下来就让我们看看 v0.8 都做了什么吧~

    Databend 是什么?

    Databend 是一个基于 Rust 开发的现代化云数据仓库,致力于实现高性能可弹性扩展的实时数据分析,激活用户的数据潜能。

    重大改进

    • New Planner: JOIN! JOIN! JOIN!

    为了更好的支持复杂的 SQL 查询和提升用户体验,Databend v0.8 设计了全新的 Planner 框架。

    在 New Planner 的驱动下,Databend 增加了 JOIN 和高效的子查询支持,所有的子查询在进入 runtime 之前已经完全被 decorrelation:

    1. select vip_info.Client_ID, vip_info.Region 
    2.     from vip_info right 
    3.     join purchase_records 
    4.     on vip_info.Client_ID = purchase_records.Client_ID;
    • New Parser: 最好用的 Parser!

    在重构 Planner 的同时,Databend 社区基于 nom和 partt 实现了兼顾开发效率与用户体验的全新 Parser。

    新的 Parser 让开发者以直观的方式轻松的设计/开发/测试复杂的 SQL 语法

    1. COPY
    2.     ~ INTO ~ #copy_unit
    3.     ~ FROM ~ #copy_unit
    4.     ~ ( FILES ~ "=" ~ "(" ~ #comma_separated_list0(literal_string) ~ ")")?
    5.     ~ ( PATTERN ~ "=" ~ #literal_string)?
    6.     ~ ( FILE_FORMAT ~ "=" ~ #options)?
    7.     ~ ( VALIDATION_MODE ~ "=" ~ #literal_string)?
    8.     ~ ( SIZE_LIMIT ~ "=" ~ #literal_u64)?

    同时能给予用户具体而精准的报错信息:

    1. MySQL [(none)]> select number from numbers(10as t inner join numbers(30as t1 using(number);
    2. ERROR 1105 (HY000): Code1065, displayText = error:
    3.   --> SQL:1:8
    4.   |
    5. 1 | select number from numbers(10as t inner join numbers(30as t1 using(number)
    6.   |        ^^^^^^ column reference is ambiguous

    再也不用担心不知道 SQL 哪里出错了。

    访问 The New Databend SQL Planner 以了解更多细节

    全新特性

    除了全新设计的 Planner 之外,Databend 社区还实现了众多新功能:

    COPY 增强:

    COPY 能力得到了极大强化,现在的 Databend 可以

    • 从任意支持的存储服务复制数据 (甚至是 https!)

    1. COPY 
    2.     INTO ontime200 
    3.     FROM 'https://repo.databend.rs/dataset/stateful/ontime_2006_[200-300].csv' 
    4.     FILE_FORMAT = (TYPE = 'CSV')
    • 支持复制压缩文件

      1. COPY 
      2.     INTO ontime200 
      3.     FROM 's3://bucket/dataset/stateful/ontime.csv.gz' 
      4.     FILE_FORMAT = (TYPE = 'CSV' COMPRESSION=AUTO)
    • UNLOAD 数据到任意支持的存储服务

      1. COPY 
      2.     INTO 'azblob://bucket/'  
      3.     FROM ontime200
      4.     FILE_FORMAT = (TYPE = 'PARQUET‘)
    • Hive 支持:

      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(https://databend.rs/blog/databend-engine)。其中一个非常重要的特性就是支持时间旅行,我们能够查询任何一个时间点的数据表。

      从 v0.8 版本开始,这个功能被正式实装啦,现在我们可以

    • 查询指定时间的数据表

      1. -- Travel to the time when the last row was inserted
      2. select * from demo at (TIMESTAMP => '2022-06-22 08:58:54.509008'::TIMESTAMP); 
      3. +----------+
      4. | c        |
      5. +----------+
      6. | batch1.1 |
      7. | batch1.2 |
      8. | batch2.1 |
      9. +----------+
    • 恢复误删除的数据表

      1. DROP TABLE test;
      2. SELECT * FROM test;
      3. ERROR 1105 (HY000): Code1025, displayText = Unknown table 'test'.
      4. -- un-drop table
      5. UNDROP TABLE test;
      6. -- check
      7. SELECT * FROM test;
      8. +------+------+
      9. | a    | b    |
      10. +------+------+
      11. |    1 | a    |
      12. +------+------+
    • 让业务数据拥有更多保障!

      CTE 支持:

      CTE (Common Table Expression) 是 OLAP 业务中经常使用的功能,用来单个语句的执行范围内定义的临时结果集,只在查询期间有效,实现代码段的重复使用,提升可读性,更好的实现复杂的查询。

      Databend v0.8 在 New Planner 的基础上重新实现了 CTE,现在用户可以快乐的使用 WITH 来声明 CTE:

      1. WITH customers_in_quebec 
      2.      AS (SELECT customername, 
      3.                 city 
      4.          FROM   customers 
      5.          WHERE  province = 'Québec') 
      6. SELECT customername 
      7. FROM   customers_in_quebec
      8. WHERE  city = 'Montréal' 
      9. 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,贡献自己的 Patch,开启了 Tracking issues of upstream first violation来跟进最新的动态。

    Databend 社区积极探索与其他开源项目的集成,目前已经实现了 Vector,sqlalchemy,clickhouse-driver 等第三方驱动的集成和支持。

    下一步计划

    Databend v0.8 是一个夯实基础的版本,我们有了全新的 Planner,能够更加轻松的去实现功能和进行优化。在 0.9 版本中,我们期望改进如下方面:

    • Query Result Cache

    • JSON Optimization

    • Table Share

    • Processor Profiling

    • Resource Quota

    • Data Caching

    欢迎查阅 Release proposal: Nightly v0.9以了解最新动态~

    现在就出发

    访问发布日志和下载最新版本以了解更多,遇到问题欢迎使用 Github Issues提交反馈!

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

     文章首发于公众号:Databend

  • 相关阅读:
    《SystemVerilog Assertion 应用指南》学习01
    Vue+Element之SpingBoot学生管理系统
    Element-UI el-select下拉框多选实现全选
    基于单片机的洗衣机仿真设计(#0022)
    Mac版Word设置从第K页开始显示页码
    CAUSE: ORA-15018: diskgroup cannot be created
    线程创建、线程池创建相关理论知识整理
    力扣(LeetCode)17. 电话号码的字母组合(C++)
    【Linux进阶篇】Linux安装MySQL
    IO多路转接之select和poll
  • 原文地址:https://blog.csdn.net/Databend/article/details/126466971