Onetable:统一的表格式元数据表示

news2024/11/15 12:36:59

概括

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 的类似实现,将通过单个集成使不同引擎之间的元数据保持同步,从而为数据湖用户创造巨大的价值。

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

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

相关文章

C++库封装JNI接口——实现java调用c++

1. JNI原理概述 通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C实现,编译为动态库,并为其设置C接口和C接口。用C实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到…

获取各省人口排名数据

目录 一、目标网址 二、网址分析 2.1、获取并解析网页内容 2.2 两种获取方法 三、获取目标数据 四、代码附件 一、目标网址 目标网址:中国人口排名 省份 1.1 网址截图 二、网址分析 2.1、获取并解析网页内容 我们需要使用requests库获取网页,使用…

三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询

目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试: 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…

多模态大模型(MLLM)之VisCPM:支持中文对话文图双向生成

2020 年 12 月发布的 CPM-1 是国内首个中文大模型 ;2022 年 9 月发布的 CPM-Ant 仅微调 0.06% 参数就能超越全参数微调效果;2023 年 5 月发布的 WebCPM 是 中文首个基于搜索的问答开源模型。CPM-Bee 百亿大模型是团队最新发布的基座模型,中文…

基于springboot+mybatis+vue进销存管理信息系统

基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能: 普通用户&#…

为啥运营商现在严格规范网购流量卡的年龄了呢?20岁以下难了

本期知识点只讲流量卡,葫芦弟今天分享给大家手机流量卡开卡安全的问题。 很多朋友可能觉得电信诈骗离自己很远,但实际上现在已经出现大量收购电话卡用于诈骗的现象,而我们很可能在不知不觉中掉进犯罪分子的陷阱,触犯法律&#xff…

关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

Vue2引入 执行npm i element-ui -S报错 原因:npm版本太高 报错信息: 解决办法: 使用命令: npm install --legacy-peer-deps element-ui --save 引入: 在main.js文件中引入 //引入Vue import Vue from vue; //引入…

C# Solidworks二次开发:自动创建虚拟零件及使用注意事项

今天要讲的是关于在solidworks中如何自动创建虚拟零件的功能,也就是solidworks中插入新零件这个功能。 实现这个功能需要使用的API如下所示: InsertNewVirtualPart(swFaceOrPlane1, out swcomp2); 其中这个方法中使…

【动态规划part11】| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

目录 🎈LeetCode123.买卖股票的最佳时机III 🎈LeetCode188.买卖股票的最佳时机IV 🎈LeetCode123.买卖股票的最佳时机III 链接:123.买卖股票的最佳时机III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i…

X99双路主机28核56线程电脑配置选购与系统装机详细流程(附带资源)

文章目录 前期调研(包含配件详细信息)装机过程推荐学习视频实践过程 系统装机(含资源详细过程)提前准备(制作系统盘工具以及ISO系统镜像)实践过程步骤一:使用Rufsus工具,选择ISO文件…

记一次 .NET 某设备监控系统 死锁分析

一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下。 二&#xff…

【原理图专题】OrCAD Capture原理图设计差异对比

在我们进行硬件设计时,往往会遇到项目上的变更。比如更换了替代料、电路错误、新需求等等,这些有的需要动用到原理图,而动到原理图往往很容易出错,特别是已经量产的产品,我们可以通过BOM对比等方式来查看变更。那是否有一种其他方式能直接进行原理图对比呢? 其中对比功能…

桥接模式——处理多维度变化

1、简介 1.1、概述 桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。与多层继承方案不同,它将两个独…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号(pom.xml)2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

Java虚拟机——线程安全与锁优化

1 线程安全 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作。调用这个对象的行为都可以获得安全的结果,就称这个对象是线程安全…

从零开始理解Linux中断架构(23)中断运行临界区和占先调度

Linux在内核中定义了6种运行临界区。 in_interrupt in_interrupt在驱动中使用频率最高的函数了,in_interrupt()就是指示Core是否正在中断处理中,包含了硬中断,软中断运行临界区。如果在中断处理中,则不能调用__do_softirq执行软中断处理。硬中断中不可调度不可中断,所有…

智慧园区安保人员巡更巡检解决方案,蓝牙信标主动式蓝牙定位导航系统

一、需求分析 目前,大部分写字楼,工厂,学校,银行,车站等场景对安保人员的管理依然靠手填单子记录作业情况,在缺乏信息化手段的情况下,靠人员自觉性或者RFID巡更棒,在这些传统方式下…

2023 年牛客多校第四场题解

A Bobo String Construction 题意:给定一个 01 01 01 字符串 t t t,构造一个长度为 n n n 的 01 01 01 串 s s s,使得 t t t 在 c o n c a t ( t , s , t ) {\rm concat}(t, s, t) concat(t,s,t) 中仅出现两次。多测, 1 ≤…

Android杂录 语音转文字功能 python混合开发环境搭建 priv-app开机赋予麦克风权限 HDMI与麦克风同时工作配置

专栏目录: 高质量文章导航-持续更新中_GZVIMMY的博客-CSDN博客 一.语音转文字功能 软件架构 硬件架构: 耳机接口 报错类型: AudioFlinger could not create record track, status: -1 Androi

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块7

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…