从 Icelake 到 Iceberg Rust

news2024/11/15 8:45:18

本文作者丁皓是Databend 研发工程师,也是开源项目 OpenDAL 作者,主要研究领域包括存储、自动化与开源。

太长不看

Icelake 已经停止更新,请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目,所有 Icelake 的贡献者都已转向该项目。它涵盖了 Icelake 之前提供的所有功能,并且是 Apache Iceberg 的官方实现版本。

引言

我将分享 icelake 和 iceberg-rust 背后的历史。这篇文章将记录一个开放社区是如何运作的:人们因共同的目标而团结,共同努力。这是开源最初的力量,也总是吸引我的地方。

Iceberg 是一种用于巨大分析表的高性能格式。它在全球范围内被广泛使用,并且几乎所有查询引擎都支持它。用户可以编写 SQL 来从存储在对象存储服务中的 Iceberg 表查询数据,无需首先将其导入数据库。 长期以来,Iceberg 缺少官方 Rust 实现,这就是我们故事开始的地方。

Icelake In Databend

我们在 Databend 内部已经讨论了很多次关于支持开放表格格式的话题,我对此非常感兴趣,尤其是 Iceberg。市面上有一些 Iceberg 的绑定存在,但都还未完全准备就绪。因此,我决定启动自己的项目叫做 Icelake。icelake 的主要理念是构建一个开放的湖仓实现方案,能够与任何表格格式兼容,包括 Iceberg、Hudi 和 Delta。

这个项目由Databend Labs赞助。我们最初将专注于支持Iceberg。

多亏了详尽的Iceberg表格规范,我用了大约一周的时间来实现Iceberg规范。在此过程中,我深入了解了表格格式是如何运作的。我已经成功地让Databend支持起了Iceberg表的读取操作!

Icelake With RisingWave

在ASF,我们常强调Community Over Code。创建了一个工作示范后,我的首要任务是找到另一位用户。幸运的是,我发现RisingWave也在开展Iceberg支持的工作。他们已经使用了Apache OpenDAL,因此我们与RisingWave有了一些联系。我直接联系他们,讨论了icelake,并邀请他们加入开发。 这就是我如何遇见Renjie的。我们俩都怀揣着用rust重写大数据生态系统的愿景。能够与他合作让我感觉非常棒。经过几次讨论后,Renjie 决定将icelake整合到RisingWave中。他和ZENOTME加入了icelake项目成为维护者,在那里他们修复了众多bug并增加了写入支持。随后,RisingWave实现了基于icelake的Iceberg sink功能。

Born of Iceberg Rust

在icelake的开发过程中,社区的一些人也认识到了为Iceberg提供原生Rust支持的必要性。Brian Olsen 发起了关于 Rust支持 的讨论。维护一个 Iceberg Rust实现的 Jan Kaul 加入讨论,并强调了icelake的存在。他还提到: It was a great timing to start a rust project in the official apache iceberg repository that we can all work on together. 随后,讨论转移到了 iceberg slack,更多的Iceberg PMC成员和提交者加入了进来。Jan Kaul邀请Renjie和我加入关于Iceberg的对话——非常感谢! 我们花了一些时间讨论仓库位置,并举行了一次在线会议。我们遇见了Jan Kual和Fokko。能够与有着相同目标的人建立联系真是太有意义了。尽管我们以前从未见过面,但共同的目标使我们能够有效地合作。这是开源社区美好的一面! 会议结束后不久,Fokko帮助我们建立了#rust Slack频道 和 iceberg-rust仓库。iceberg rust 项目正式启动,在我的生日(7月20日,考虑到时区变化)这一天。

Grow of Iceberg Rust

在建立了Iceberg Rust仓库之后,我们设定了贡献工作流程、CI操作和发布脚本,还添加了完整的规范实现和Arrow集成。 随着开发的进展,更多人加入了我们的团队,包括marvinlanhenke、sdd、viirya、odysa,以及其他30位!不到一年时间,我们吸引了43名贡献者,并进行了官方ASF发布。Renjie 被授予首位来自Iceberg Rust项目的Iceberg提交者荣誉。他还代表该项目出席了第一届Iceberg峰会:将Apache Iceberg带入Rust世界!

Sunset of Icelake

在撰写本文时,Iceberg Rust已覆盖icelake之前提供的所有功能,并现已成为Apache Iceberg的官方实现。一些主要使用icelake的用户已经或正在转向Iceberg Rust。

是时候逐步淘汰icelake项目,为Iceberg Rust让路了。我代表所有icelake提交者宣布,我们已正式结束了icelake项目。它将不再维护,所有当前用户现在应迁移到Iceberge Rust。 感谢所有参与和使用icelike的贡献者及用户;能够得到你们的支持是极大的荣幸。

Future of Iceberg Rust

目前,Iceberg Rust 社区正在开发 0.3 版本。这个版本将包括大部分用户需要用来读写 Iceberg 表的功能。我们鼓励所有对使用 Rust 操作 Iceberg 感兴趣的人尝试此版本,并为我们提供反馈。

在下一个版本中,我们将整合对 DataFusion 的原生支持,并增强与其他查询引擎连接 Iceberg 的体验,例如Databend。也许我们可以探索支持 iceberg-nodejs 或 iceberg wasm 的新领域。有许多有趣的领域等待我们去发现! 总结

就这些了。感谢大家帮助构建 iceberg-rust。我期待在这一领域做出更多贡献。如果你也感兴趣,请随时联系我;我很乐意提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 自动更新时间的数字时钟 TextClock

TextClock 继承 TextView &#xff0c;使用方法和 TextView 一样。 它专门用于显示数字时钟&#xff0c;可以自定义显示格式。 只要在布局文件里添加&#xff0c;它会自动更新时间&#xff0c;不需要添加刷新逻辑。 布局文件&#xff0c; <?xml version"1.0"…

计算机网络施工方案(非常详细)零基础入门到精通,收藏这一篇就够了

虽然弱电人平时接触网络工程项目比较多&#xff0c;但要系统的实施网络工程项目从施工、设备安装、验收这一套流程&#xff0c;很多朋友却感觉无从下手&#xff0c;计算机网络系统主要是一些网络设备&#xff0c;这样的系统施工方案如何写呢&#xff1f;在我们弱电vip技术中也经…

【Linux】任务管理

这个任务管理&#xff08;job control&#xff09;是用在bash环境下的&#xff0c;也就是说&#xff1a;【当我们登录系统获取bashshell之后&#xff0c;在单一终端下同时执行多个任务的操作管理】。 举例来说&#xff0c;我们在登录bash后&#xff0c;可以一边复制文件、一边查…

电脑硬盘里的文件能保存多久?电脑硬盘文件突然没了怎么办

在数字化时代&#xff0c;电脑硬盘作为我们存储和访问数据的重要设备&#xff0c;承载着无数珍贵的回忆、工作成果和创意灵感。然而&#xff0c;硬盘里的文件能保存多久&#xff1f;当这些文件突然消失时&#xff0c;我们又该如何应对&#xff1f;本文将深入探讨这两个问题&…

【JavaScript 报错】未捕获的模块错误:Uncaught ModuleError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 模块路径错误2. 模块不存在3. 模块命名错误 二、解决方案1. 检查模块路径2. 确保模块存在3. 检查模块名称 三、实例讲解四、总结 在JavaScript模块系统中&#xff0c;未捕获的模块错误&#xff08;Uncau…

前端面试题55(JavaScript前缀中缀后缀表达式)

在编程中&#xff0c;前缀、中缀和后缀表达式是用于描述算术表达式的不同表示方法&#xff0c;主要用于解析和计算数学公式。这些概念在算法设计&#xff08;尤其是表达式树和栈的应用&#xff09;中非常重要。下面我将分别解释这三种表达式&#xff0c;并用JavaScript代码示例…

html网页设计关于家乡-泰州

代码地址&#xff1a;https://pan.quark.cn/s/0f8659c712d0

逻辑运算及其基本概念,定理,算法,规律,卡诺图

逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图 文章目录 逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图开胃小菜运算1、与运算2、或运算3、非运算4、与非&#xff08;都1时为0&#xf…

解决GET请求中文乱码问题

解决GET请求中文乱码问题 1、乱码的根本原因2、解决方法方法一&#xff1a;修改Tomcat配置&#xff08;推荐&#xff09;方法二&#xff1a;使用URLEncoder和URLDecoder&#xff08;不推荐用于GET请求乱码&#xff09;方法三&#xff1a;String类编解码&#xff08;不直接解决乱…

Qt中实现让静态图片动起来,创建动画效果

在现代应用程序开发中&#xff0c;动画效果是提升用户体验的重要元素之一。Qt作为一个强大的跨平台应用程序框架&#xff0c;提供了丰富的工具和库来创建各种动画效果。本文将介绍如何在Qt中使用静态图片创建动画效果。 实现方法一 使用QTimer和QPixmap 1.准备图片资源&#…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表&#xff08;linear list&#xff09;是n…

【Python】Python Flask 和 gRPC 简单项目

Python Flask 和 gRPC 示例项目 本文将介绍如何在 Python 中使用 Flask 和 gRPC 创建一个简单的示例应用程序&#xff0c;并使用 requests 库进行测试。 环境设置 首先&#xff0c;确保您已经安装了 Python。然后&#xff0c;创建一个虚拟环境以管理您的依赖项。 python -m…

想要爬取第一条网页的数据但是失败了?如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

使用Python的Turtle模块绘制玫瑰

在本文中&#xff0c;我们将通过使用Python中的turtle模块来绘制一个精美的花朵图案&#xff0c;包括花蕊、花瓣和叶子。turtle模块是Python标准库的一部分&#xff0c;用于创建图形和动画&#xff0c;非常适合初学者学习编程基础和图形绘制。 初始设置 import turtle# 设置初…

简介Docker以及K8s

什么是Docker Docker 属于 Linux 容器的一种封装&#xff0c;提供简单易用的容器使用接口以及操作系统级别的虚拟化。 更为直白的叙述就是&#xff0c;Docker可以将程序和环境&#xff08;依赖库配置操作系统&#xff09;打包并运行的工具软件。 基础镜像 总所周知&#xf…

搜维尔科技:《Patchwork 3D 2024》现已推出,改善用户体验的同时添加了最受欢迎的功能

《Patchwork 3D 2024》现已推出!发现我们在改善用户体验的同时添加的最受欢迎的功能。 令人兴奋的消息值得分享&#xff01;Patchwork 3D 已经升级&#xff0c;并带来一些令人惊叹的新功能。 材料 镜面材质现在支持漫反射、镜面反射和凹凸特性&#xff0c;可实现精细调整的光…

防火墙安全策略练习

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置交换机&#xff0c;划分接口的vlan&#xff0c;配置ISP 2.配置防火墙 3.接下来在WEB界面进行所有安全策略操作 配置接口 创建安全区域&#xff1a; 创建地址&#xff1a; 时间段&#xff1a; 安全策略部分&#xff…

Java 常用的参数校验,简化参数校验,赶紧学起来!!

Java 常用的参数校验&#xff0c;简化参数校验&#xff0c;赶紧学起来&#xff01;&#xff01;Java中的参数校验注解主要用于简化数据验证的过程&#xff0c;它们允许开发者以声明式的方式指定参数的验证规则&#xff0c;而无需在业https://mp.weixin.qq.com/s?__bizMzkzMTY0…

LLM-向量数据库中的索引算法总结

文章目录 前言向量数据库介绍索引方法倒排索引KNN 搜索近似 KNN 搜索Product Quantization(PQ)NSW 算法搜索HNSW 前言 向量数据库是当今大模型知识库检索落地实践的核心组件&#xff0c;下图是构建知识库检索的架构图&#xff1a; 首先会将相关文档数据向量化嵌入到向量化数据…

视图库对接系列(GA-T 1400)十六、视图库对接系列(本级)通知(订阅回调)

说明 之前我们实现了订阅接口,其中有一个receiveAddr参数, 这个就是对应的回调的地址。一般情况下对应的是同一个服务。 我们推荐使用http://xxx:xxx/VIID/SubscribeNotifications接口文档 SubscribeNotificationList对象对象如下: 文档中是xml,但实际上目前使用的都是jso…