Delta Lake基础介绍(商业版)

简介:介绍 Lakehouse 搜索引擎的设计思想,探讨其如何使用缓存,辅助数据结构,存储格式,动态文件剪枝,以及 vectorized execution 达到优越的处理性能。

作者:李洁杏,Databrick资深软件工程师

一、Lakehouse搜索引擎设计背景

1. 数据仓库和Lakehouse

数据管理系统从早期的数据仓库(Data Warehouse),已经发展到今天的Lakehouse。Lakehouse可以同时存储结构化、半结构化和非结构化数据,并且支持流分析、BI、数据科学和机器分析的场景。

2. Lakehouse在查询性能上的挑战

数据仓库架构可以完全控制数据的存储和查询,因此可以同时设计查询系统,以及适应查询系统的数据存储结构,以达到优越的查询性能;

而在Lakehouse架构下,数据是用开放存储结构存储的,如Parquet格式,以便更多系统可以便捷的访问数据,但是开放的存储格式并不一定适合查询操作,查询系统也没有足够的统计数据来实现高效查询。

那么,Lakehouse如何以开放的存储格式达到高效的查询性能?

3. 解决方案

为解决以上的问题,Databricks Lakehouse设计了新的搜索引擎,其SQL性能在Data Lake存储系统和文件格式方面都有出色的表现。

其SQL性能优化是通过以下技术实现的:

a.  高速缓存:将热数据放入高速缓存中;

b.  建立辅助数据结构:如收集统计数据、建立索引;

c.  数据布局优化:以实现最小化I/O;

d.  动态文件剪枝:以实现最小化I/O。

二、Lakehouse中的SQL性能优化技术

1. 高速缓存

大部分的工作负载,一般都会集中访问某些“热”数据上,Data Warehouse经常使用SSD和内存作为缓存来加速热数据的查询。

Lakehouse可以使用与数据仓库相同的优化数据结构对其进行缓存,提高查询性能。

如图所示,在Databricks中用SSD作为缓存,可以将数据读取速度提高3倍以上;采用Delta引擎作为缓存,则可以将数据读取速度提高7倍以上。

2. 建立辅助数据结构

即使数据是用Parquet格式存储的,也可以建立很多额外的数据结构来加快查询,同时对这些额外的数据进行事务性的维护。

示例一:Parquet文件中的Data Skipping

在Parquet文件中,维护表中每个数据文件的最小/最大值统计信息,有助于在查询发生时可以跳过一些无关的数据。

如下图,如果查询条件是year=2020和uid=24000,利用最小/最大统计信息,可知这个查询的信息只会存在于file3,因此可以跳过file1和file2的读取。

示例二:在Parquet文件上建立索引

如下图,如果查询条件是type=“DELETE_ACCOUT”,可以利用在type上建立的索引直接跳到对应的数据上,从而避免读取无关数据。

示例三:Parquet文件上建立Bloom Filter

可以为每一个文件建立Bloom Filter,Bloom Filter可以快速判断表文件中是否包含需要查询的数据,如果不包含则快速跳过该文件,从而减少扫描数据量,提升查询性能。

Bloom Filter原理:

Bloom Filter对每个文件中的数据记录使用1个或多个哈希表计算其哈希值,其起始值都为0,当有哈希值映射在对应的位置时则为1,这样在查询的时候,可以跳过值为0的位置;也有可能的情况是,对应的位全部都为1,这时候数据也有可能不在这个文件中(假阳性),可以通过控制使用哈希函数的个数以及Bloom Filter的大小,来控制假阳性率。

3. 数据布局

a.  小文件问题

在Delta Lake中频繁执行MERGE,UPDATE,INSERT操作,可能会产生大量的小文件。大量的小文件,一方面会降低系统读取性能,同时也会提高元数据操作的开销。

Lakehouse中使用了不同的技术来减少小文件的产生:

  • 优化Delta表写入

如下图所示,在开源版Spark中,每个executor向partition中写入数据时,都会创建一个表文件进行写入,最终会导致一个partition中产生很多的小文件。

Databricks对Delta表的写入过程进行了优化,对每个partition使用一个专门的executor来合并其它executor对该partition的写入,从而避免了小文件的产生。

  • 自动合并小文件

在每次向Delta表中写入数据之后,会检查Delta表中的表文件数量,如果Delta表中的小文件(size < 128MB则视为小文件)数量达到阈值,则会执行一次小文件合并,将Delta表中的小文件合并为一个新的大文件。

  • 手动合并小文件

除了自动合并,Databricks还提供Opitmize命令,使用户可以手动合并小文件,优化表结构,使得表文件的结构更加紧凑。

b.  查询时间问题

查询运行时间主要取决于访问的数据量,即使使用Parquet格式,也可以通过优化表内的数据布局以减少运行时间。

  • 表文件数据排序

将表文件存储数据排序,在每个表文件中存储一定量的数据,如下图中file1存储uid=0...1000,file2存储uid=1001...2000,这样在查询时就可以根据需要跳过无关的表文件,减少文件扫描数量。

  • Z-Ordering优化

在实际查询中,有些查询需要看colomn1在某个范围内的数据,有些查询需要看colomn2在某个范围内的数据,或者更多,这时候仅仅对colomn1进行排序显然是不够的。

Z-Ordering可以在多个维度上(如下图的col 1-4)将关联的信息存储到同一组文件中,来减少不必要的文件读取。

4. 动态文件剪枝(Dynamic File Pruning,DFP)

动态文件剪枝简称DFP,我们以下面一个简单的查询为例:

SELECT sum(ss_quantity) 
FROM store_sales 
JOIN item ON ss_item_sk = i_item_sk 
WHERE i_item_id =‘AAAAAAAAICAAAAAA'

查询说明:将store_sales与item两个表连起来,条件是当item_sk值相等且item_id等于一个固定值。

未启用DFP

如果不开启DFP,从上图可以看出,查询会先对store_sales进行全表扫描,然后再和过滤后的item表的行进行join,虽然结果仅有4.6万多条数据,但却扫描了表store_sales中的86多亿条数据。

启用DFP

在启用DFP之后,会先扫描item表,查询出表item中i_item_id = ‘AAAAAAAAICAAAAAA'数据行,然后将这些数据行的i_item_sk值作为表store_sales的ss_item_sk的查询条件,在表store_sales的SCAN阶段进行过滤,跳过大量无关数据。这样仅扫描了660多万条store_sales中的数据,比未启用DFP时减少了近99%。

从结果上看,启动DFP后,该条查询实现了10倍的性能提升。

针对该特性在TPC-DS上进行测试(见下图),测试发现启用DFP后,TPC-DS的查询速度达到4.5倍到8倍的提升。

5. 优化组合

综合使用以上优化技术协同工作,让Lakehouse中的数据读取都在高速缓存中进行,并且通过数据布局优化,建立辅助数据结构减少对非缓存数据读取的I/O,实现了Lakehouse引擎可以提供与数据仓库类似的查询性能。

如下图所示,Delta Engine的查询性能与DW1类似,并且超过了DW2和DW3。

三、Delta Clones

Delta Clones是Lakehouse的一项非常重要的技术,可以对大型数据集进行高效拷贝,支持测试、分享和机器学习的不同需求。

1. 什么是克隆?

克隆也叫拷贝,是原始数据在给定时间点的副本;

它具有与源表相同的元数据:相同表结构,约束,列描述,统计信息和分区;

两种克隆方式:shallow(浅克隆),deep(深克隆)。

2. 深克隆

深克隆会完整复制源表的元数据和数据文件,并生成一个全新的独立的表。

a. 深克隆语句

在SQL中运行CREATE TABLE语句;在Python和Scala语句中运行DeltaTable语句。

# SQL 
CREATE TABLE delta.`path/to/copy` CLONE customers
# Python and Scala
DeltaTable
.forName("park", "customers")
.clone("path/to/copy")

b. 深克隆的特性

  • 与源表相比,克隆表有独立的历史记录;
  • 在克隆过程中、或之后发生的对源表的任何更改,都不会反映在克隆表中;

3. 浅克隆

浅克隆仅复制需要克隆的表的元数据,表本身的数据文件不会被复制。

a.  浅克隆语句

与深克隆语句类似,只是在SQL中加入SHALLOW CLONE语句;在Python和Scala中加入isShallow=true。

# SQL 
CREATE TABLE delta.`path/to/copy` SHALLOW CLONE customers
# Python and Scala 
DeltaTable 
.forName("spark", "customers") 
.clone("path/to/copy", isShallow=true)

b.  浅克隆的特性

  • 浅克隆不是自包含的,即自身不是数据源,如果源文件数据被删除,则浅克隆数据可能会不可用;
  • 浅克隆不复制流事务或COPY INTO相关的元数据;

4. 克隆的适用场景

克隆的适用场景有很多,比如:数据存储、短期实验、数据分享和灾难恢复,其中除了短期实验使用浅克隆,其它场景都需要使用深克隆。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

云原生数仓如何破解大规模集群的关联查询性能问题?

简介&#xff1a;AnalyticDB for PostgreSQL(以下简称ADB PG)是一款PB级的MPP架构云原生数据仓库。本文从ADB PG架构设计的角度出发&#xff0c;探讨Runtime Filter在ADB PG中的实现方案&#xff0c;并介绍了基于Bloom Filter的ADB PG Dynamic Join Filter功能技术细节。 作者 …

独家对话Python之父:人类大脑才是软件开发效率的天花板

【CSDN 编者按】十五年前&#xff0c;《程序员》杂志曾专访过 Python 之父 Guido van Rossum&#xff0c;一起探讨了 Python 3.0 的较为明显的新特性&#xff0c;即增加了对中文( Unicode )的支持。十五年过去&#xff0c;Python 的版本号只前进了一个数字&#xff0c;但是 Pyt…

淘系用户平台技术团队单元测试建设

简介&#xff1a;单元测试是工程交付前质量保障的第一环&#xff0c;也无疑是软件工程质量保障的重要基石&#xff0c;有效的单元测试能够提前发现90%以上的代码Bug问题&#xff0c;同时也能防止代码的腐化&#xff0c;在工程重构演进时起到至关重要的作用。 作者 | 问元 来源 …

阿里云弹性计算对视觉计算的思考与实践

简介&#xff1a;利用人类已有和将有的技术加之商业手段&#xff0c;实现对人类感官体验进行全方位升级。 4月21日&#xff0c;“2022英伟达数字孪生技术应用论坛”上&#xff0c;阿里云弹性计算产品专家张新涛为大家带来了题为《阿里云弹性计算在XR业务上的应用实践》的主题分…

游戏行业弹性计算最佳实践

简介&#xff1a;本篇主要介绍三大游戏场景&#xff1a;游戏服务、大数据运营、云游戏的架构特点&#xff0c;以及基于这些场景下的阿里云游戏行业计算基础设施选型与部署方案。 文丨寻野&#xff0c;阿里云弹性计算产品解决方案架构师 摘要&#xff1a;游戏一直以来是互联网…

三大特性,多个场景,Serverless 应用引擎 SAE 全面升级

简介&#xff1a;Serverless 应用引擎 SAE 凭借着天然技术优势&#xff0c;已经帮助成千上万家企业实现容器和微服务技术转型。近日&#xff0c;SAE不仅进一步提供了全套微服务能力&#xff0c;更为传统 Job 和 PHP 用户提供了全新的&#xff0c;更高效、更经济且可平滑迁移的解…

代码覆盖率在性能优化上的一种可行应用

简介&#xff1a;JavaScript 是前端应用主要语言&#xff0c;相较于其他平台编程语言&#xff0c;JS资源多数情况下要通过网络进行加载&#xff0c;那么代码的体积直接影响了页面加载执行时间。“无效的代码”的多寡直接影响到了我们的代码质量&#xff0c;所以度量代码的执行覆…

MaxCompute湖仓一体介绍

简介&#xff1a;本篇内容分享了MaxCompute湖仓一体介绍。 分享人&#xff1a;孟硕 阿里云 MaxCompute产品专家 视频链接&#xff1a;数据智能实战营-北京站 专题回顾 正文&#xff1a; 本篇内容将通过两个部分来介绍MaxCompute湖仓一体。 一、什么是 MaxCompute 湖仓一体…

云原生离线实时一体化数仓建设与实践

简介&#xff1a;本篇内容分享了云原生离线实时一体化数仓建设与实践。 分享人&#xff1a;刘一鸣 Hologres 产品经理 视频链接&#xff1a;数据智能实战营-北京站 专题回顾 正文&#xff1a; 本篇内容将通过五个部分来介绍云原生离线实时一体化数仓建设与实践。 一、离线实…

议题征集|Flink Forward Asia 2022 正式启动

在这数据量爆炸性增长的时代&#xff0c;开源软件如雨后春笋般出现在开发者的视野中&#xff0c;数据的价值被重新定义。同时&#xff0c;越来越多的企业开启实时化道路&#xff0c;数据的实时分析与计算需求与日俱增。作为主打流处理的计算引擎 Apache Flink 于 2014 年正式开…

龙蜥正式开源 SysOM:百万级实战经验打造,一站式运维管理平台 | 龙蜥技术

简介&#xff1a;SysOM集监控、告警、诊断、修复、安全能力于一体的操作系统运维平台。 文/系统运维 SIG 如果你被突如其来的 OOPS 和满屏奇怪的函数弄得满头问号&#xff1f;机器内存明明很大&#xff0c;却申请不出来内存&#xff1f;业务周期抖动&#xff0c;ping 命令偶尔…

微软在华商业应用战略全面升级,首次推出面向医疗和生命科学的云行业套件

2022年9月29日&#xff0c;微软宣布进一步升级在华商业应用战略&#xff0c;落地一系列智能商业应用&#xff08;Biz App&#xff09;功能的同时&#xff0c;以Dynamics 365和Power Platform为基础&#xff0c;进一步完善商业应用战略与价值定位&#xff0c;助力更多客户和合作…

使用Databricks进行零售业需求预测的应用实践

简介&#xff1a;本文从零售业需求预测痛点、商店商品模型预测的实践演示&#xff0c;介绍Databricks如何助力零售商进行需求、库存预测&#xff0c;实现成本把控和营收增长。 作者&#xff1a;李锦桂 阿里云开源大数据平台开发工程师 本文从零售业需求预测痛点、商店商品模型…

龙蜥开源内核追踪利器 Surftrace:协议包解析效率提升 10 倍 | 龙蜥技术

简介&#xff1a;如何将网络报文与内核协议栈清晰关联起来精准追踪到关注的报文行进路径呢&#xff1f; 文/系统运维 SIG Surftrace 是由系统运维 SIG 推出的一个 ftrace 封装器和开发编译平台&#xff0c;让用户既能基于 libbpf 快速构建工程进行开发&#xff0c;也能作为 ft…

开源要正式写进法律了?

作者 | 何苗 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;去年&#xff0c;当大家还在为开源的快速发展而欢呼之际&#xff0c;影响了全球数百万台计算机Log4j 漏洞事件给开源软件开发者与使用者敲响了一记警钟。因而今年&#xff0c;开源软件及其供应链安全…

阿里云软著申请|这项保护,让我得到了10万赔偿

简介&#xff1a;对于企业来说&#xff0c;申请软件著作权是证明自己和保护自己的强力护盾。除此之外&#xff0c;它还有着很多不可忽视的意义与价值。阿里云软著申请&#xff0c;一站式智能服务&#xff0c;助力企业和开发者高效发展&#xff0c;省时省力更省心。 前几日&…

宜搭小技巧|海量数据管理难?这招帮你事半功倍

简介&#xff1a;一键生成数据管理页&#xff0c;海量数据随心管理&#xff01; 话接上回&#xff0c;宜小搭组织大家团建&#xff0c;当收集完大家的报名信息后&#xff0c;有小伙伴想要修改已提交的信息&#xff0c;面对海量的数据&#xff0c;整理查找太费时间。 如何快速…

1024 程序员节官方剧透:重磅大咖再聚,共话中国技术新生态

在二进制垒起的计算机世界里&#xff0c;1024 对于程序员而言&#xff0c;早已不再是单纯的一串数字&#xff0c;不断演进的开发时代赋予了它特殊的意义。 伴随着一份份热衷与期盼&#xff0c;10 月 22-24 日&#xff0c;由湖南湘江新区管委会主办&#xff0c;长沙工业与信息化…

前端性能优化实战

简介&#xff1a;引用彼得德鲁克的一句话&#xff0c;“You cant manage what you cant measure。一件事如果你无法衡量它、你就无法管理它”&#xff0c;性能同样如此。如果没有一个准确的方案来对性能进行度量&#xff0c;那优化就无从谈起。那么对于我们来说&#xff0c;哪些…

Elastic与阿里云助力汽车及出行产业数字化转型

简介&#xff1a;目前&#xff0c;阿里云和Elastic在全国已经有很多的项目正在开展合作&#xff0c;而在移动出行领域与享道出行的合作案例&#xff0c;则是代表性的。 在汽车产业变革逐步深入的当下&#xff0c;云计算、大数据等信息技术成为了汽车企业经历数字化转型时的“刚…