概括

Onehouse 客户现在可以将他们的 Hudi 表查询为 Apache Iceberg 和/或 Delta Lake 表,享受从云上查询引擎到顶级开源项目的原生性能优化。

在数据平台需求层次结构的基础上,存在摄取、存储、管理和转换数据的基本需求。 Onehouse 提供这种基础数据基础架构作为服务,以在客户数据湖中摄取和管理数据。 随着数据湖在组织内的规模和种类不断增长,将基础数据基础架构与处理数据的计算引擎分离变得势在必行。 不同的团队可以利用专门的计算框架,例如 Apache Flink(流处理)、Ray(机器学习)或 Dask(Python 数据处理),以解决对其组织重要的问题。 解耦允许开发人员在以开放格式存储的数据的单个实例上使用这些框架中的一个或多个,而无需将其复制到和存储紧密耦合的另一服务中。 Apache Hudi、Apache Iceberg 和 Delta Lake 已成为领先的开源项目,为这个解耦存储层提供一组强大的原语,这些原语在云存储中围绕打开的文件提供事务和元数据(通常称为表格式)层,像 Apache Parquet 这样的格式。

背景

AWS 和 Databricks 在 2019 年为此类技术创造了最初的商业势头,分别支持 Apache Hudi 和 Delta Lake。 如今大多数云数据供应商都支持其中一种或多种格式。 然而他们继续构建一个垂直优化的平台以推动对他们自己的查询引擎的粘性,其中数据优化被锁定到某些存储格式, 例如要解锁 Databricks 的 Photon 引擎的强大功能需要使用 Delta Lake。 多年来 AWS 已在其所有分析服务中预安装 Apache Hudi,并继续近乎实时地支持更高级的工作负载。 Snowflake 宣布与 Iceberg 更强大的外表集成,甚至能够将 Delta 表作为外表进行查询。 BigQuery 宣布与所有三种格式集成,首先是 Iceberg

所有这些不同的选项都提供了混合支持,我们甚至还没有开始列出各种开源查询引擎、数据目录或数据质量产品的支持。 这种越来越大的兼容性矩阵会让组织担心他们会被锁定在一组特定的供应商或可用工具的子集中,从而在进入数据湖之旅时产生不确定性和焦虑。

为什么要建立 Onetable?

在过去的一年里,我们发布了开源项目之间的全面比较,展示了 Hudi 如何具有显着的技术差异化优势,尤其是在为 Hudi 和 Onehouse 的增量数据服务提供支持的更新繁重工作负载方面。 此外Hudi 用于管理和优化表格的自动化表格服务为数据基础架构奠定了全面的基础,同时完全开源。 在选择表格格式时,工程师目前面临着一个艰难的选择,即哪些好处对他们来说最重要。 例如选择 Hudi 的表服务或像 Databricks Photon 这样快速的Spark引擎。 在 Onehouse我们会问真的有必要进行选择吗? 我们希望客户在处理他们的数据时获得尽可能好的体验,这意味着支持 Hudi 以外的格式以利用数据生态系统中不断增长的工具和查询引擎集。 作为一家倡导跨查询引擎互操作性的公司,如果我们不对元数据格式应用相同的标准以帮助避免将数据分解成孤岛,那我们的表现就很虚伪。 今天我们通过 Onetable 朝着这个方向迈出了一大步。

什么是 Onetable?

Onehouse 致力于开放,并希望通过我们的云产品 Onetable 上的一项新功能,帮助组织享受 Hudi 解锁的成本效率和高级功能,而不受当前市场产品的限制。 当数据静止在湖中时三种格式并没有太大区别。 它们都提供了对一组文件的表抽象,以及模式、提交历史、分区和列统计信息。 Onetable 采用源元数据格式并将表元数据提取为通用格式,然后可以将其同步为一种或多种目标格式。 这使我们能够将通过 Hudi 摄取的表公开为 Iceberg 和/或 Delta Lake 表,而无需用户复制或移动用于该表的底层数据文件,同时维护类似的提交历史记录以启用适当的时间点查询。

这种方法类似于 Snowflake 为 Iceberg 表保留其内部元数据,同时为外部互操作性创建 Iceberg 元数据的方式。 Hudi 还已经支持与 BigQuery 的集成,大型开源用户和 Onehouse 用户正在使用它。

我们为什么兴奋?

Onehouse 客户可以选择启用 Onetable 作为目录来自动将他们的数据公开为 Hudi 表以及 Iceberg 和/或 Delta Lake 表。 以这些不同的元数据格式公开表使客户能够轻松地加入 Onehouse 并享受托管Lakehouse的好处,同时使用他们喜欢的工具和查询引擎维护他们现有的工作流程。

例如Databricks 是运行 Apache Spark 工作负载的一个非常受欢迎的选择,其专有的 Photon 引擎可在使用 Delta Lake 表格式时提供性能加速。 为了确保使用 Onehouse 和 Databricks 的客户获得良好的体验而没有任何性能缺陷,我们使用 1TB TPC-DS 数据集来对查询性能进行基准测试。 我们比较了 Apache Hudi 和 Delta Lake 表,有/没有 Onetable 和 Databricks 的平台加速,如磁盘缓存和 Photon。 下图显示了 Onetable 如何通过基于 Delta Lake 协议转换元数据来解锁 Onehouse/Hudi 表上 Databricks 内部的更高性能。

此外我们将 Snowflake 中的同一张表公开为外部表,该表通常用于数仓。 我们执行了类似的 1TB TPC-DS 基准测试,比较了 Snowflake 的原生/专有表、外部Parquet表和使用 Onetable 的 Hudi 表。 下图显示 Onetable 如何向 Snowflake 查询公开 Hudi 表的一致快照,同时提供与 Snowflake 的 parquet 表类似的性能。

虽然上述外表的性能不如本地 Snowflake 表快,Onetable 提供了公开 Snowflake 内部数据湖的最新视图的功能,以帮助支持下游 ETL/转换或在组织过渡到构建Lakehouse以补充其 Snowflake 数据仓库时保持查询运行。 这种方法避免了将全套数据复制到仓库或使存储成本加倍,同时仍允许工程师和分析师派生出更有意义的聚合原生表,以快速提供报告和仪表板,充分利用 Snowflake 的强大功能。

最重要的是我们很高兴看到这如何帮助用户使用灵活的分层数据架构取得成功,这种架构已经在许多大型数据组织中流行。 Apache Hudi 为数据湖上的增量摄取/etl 提供行业领先的速度和成本效益,这是 Onehouse 的基础。 用户利用 Hudi 将这种高效、成本优化的数据摄取到原始/铜银表中。 Onehouse 的表管理服务可以直接在湖级别优化此数据的布局,以获得更好的查询性能。 然后用户可以使用 BigQuery、Redshift、Snowflake 等仓库引擎或 Databricks、AWS EMR、Presto 和 Trino 等湖引擎转换这些优化表。 然后将派生数据提供给最终用户,以构建个性化、近实时仪表板等数据应用程序。 Onetable 为用户提供了非常需要的可移植性,让他们可以根据自己的需求和成本/性能权衡来选择他们喜欢的查询引擎。 同时用户可以通过 Hudi 经验证的具有挑战性的变更数据捕获场景的效率以及 Onehouse 的表优化/管理服务来降低计算成本。

未来工作

数据空间中查询引擎、开源工具和新产品的格局在不断发展。 每年涌现的这些现有服务和新服务中的每一项都对这些表格格式提供了不同程度的支持。 Onetable 允许我们的客户使用任何与三种格式中的至少一种集成的服务,从而为他们提供尽可能多的选择。

Onehouse 致力于开源,其中包括 Onetable。 最初这将是为 Onehouse 客户保留的内部功能,因为我们会迭代设计和实施。 我们正在寻找来自其他项目和社区的合作伙伴来迭代这个共享的表标准表示,并最终为整个生态系统开源该项目。 例如当底层 Hudi 表发生变化时,Hudi 的目录同步表服务会增量维护此类目录元数据。 与 Onetable 的类似实现,将通过单个集成使不同引擎之间的元数据保持同步,从而为数据湖用户创造巨大的价值。

Onetable:统一的表格式元数据表示的更多相关文章

  1. SWT中的布局之-----FormLayout(表格式布局)

    表格式(FormLayout类) 表格式布局管理器,通过创建组件各个边的距离来布局组件,和GridLayout一样强大. 用GridLayout与FormLayout都可以实现相同的界面效果,但有时使 ...

  2. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  3. 统一修改表单参数(表单提交的空字符串统一转null)

    统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...

  4. mysql之统一刷表

    统一刷表: update report set pdfPath= CONCAT(pdfPath ,substring_index(fileLink, '\\', -1)); update report ...

  5. 解决spring boot中rest接口404,500等错误返回统一的json格式

    在开发rest接口时,我们往往会定义统一的返回格式,列如: { "status": true, "code": 200, "message" ...

  6. python打印表格式数据-星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  7. spring boot:使接口返回统一的RESTful格式数据(spring boot 2.3.1)

    一,为什么要使用REST? 1,什么是REST? REST是软件架构的规范体系,它把资源的状态用URL进行资源定位, 以HTTP动作(GET/POST/DELETE/PUT)描述操作 2,REST的优 ...

  8. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

    大家好,我是飘渺. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...

  9. SpringBoot 如何统一后端返回格式

    在前后端分离的项目中后端返回的格式一定要友好,不然会对前端的开发人员带来很多的工作量.那么SpringBoot如何做到统一的后端返回格式呢?今天我们一起来看看. 为什么要对SpringBoot返回统一 ...

  10. 基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理

    在工作流页面中,除了特定的业务表单信息外,往往也需要同时展示通用申请单的相关信息,因此在页面设计的时候需要使用一些组件化的概念来实现动态的内容展示处理,本篇随笔介绍Vue3+TypeScript+El ...

随机推荐

  1. Communications link failure:The last packet successfully received from the server was 0 millisecond ago

    出现这种错误的大致情况如下: 1.数据库连接长时间未使用,断开连接后,再去连接出现这种情况.这种情况常见于用连接池连接数据库出现的问题 2.数据库连接的后缀参数问题 针对上述两种情况,解决方案如下 1 ...

  2. verilog 硬件描述语言

    第一章 绪论 verilog--数字电路设计技术--ASIC/SOC芯片设计--协议pcie SATA USB--系统知识(个人计算机,芯片组,网络连接,嵌入式系统,硬件和软件的互操作) 第二章 寄存 ...

  3. tp 获取器的使用中应该怎么append 自定义数据

    $data = model('organization_area')->getListByNoPage($where, 'create_time asc');foreach ($data as ...

  4. Android studio 使用Internet传递信息

    使用Intent在Activity之间传递信息1.首先创建一个新的Activity,在activity_main.xml中设计页面,将android.support.constraint.Constr ...

  5. 后台调用 WEBAPI 几种方式

    示例是调用谷歌短网址的API. 1. HttpClient方式: public static async void DoAsyncPost() { DateTime dateBegin = DateT ...

  6. Nexus系列---【使用docker搭建nexus3仓库】

    1.Docker搭建nexus3私服 如果机器配置比较低,建议指定初始内存大小,默认2G docker run -d \ --restart=always \ --name=nexus3 \ -p 6 ...

  7. MySQL数据库sql_mode导致varchar字段超过长度被截断插入

    django数据库设置sql_mode MySQL的sql_mode解析与设置 mysql中sql_mode的修改 sql_mode:它定义了MySQL应该支持的sql语法,对数据的校验等等. 问题 ...

  8. 8.Vuex状态管理

    一.Vuex 概述 1.1 组件之间共享数据的方式 父传子: v-bind 属性绑定 子传父: v-on 事件绑定 兄弟组件之间共享数据: EventBus $on 接收数据的那个组件 (数据接收方) ...

  9. ORACLE触发器:插入数据时,对其中的一个字段进行默认赋值

    Create trigger t_datebefore insertbegin:new.sj = to_char(sysdate,'yyyy-MM-dd HH:mm:ss')end

  10. EVE如何提升名望值

    目录 背景介绍 简介 名望值划分 军团名望值 利弊 背景介绍 ​ 玩eve将近3个星期,开着毒蜥级刷1级代理人任务感觉没有一点难度,想尽快刷3.4级代理任务,而我目前能够接到的最高代理任务也就才1级. ...