【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake

embedded/2025/3/6 15:37:15/

本文属于【Azure 架构师学习笔记】系列。
本文属于【Azure Databricks】系列。
接上文 【Azure 架构师学习笔记】- Azure Databricks (14) – 搭建Medallion Architecture part 2

前言

ADB 除了UC 这个概念之外,前面【Azure 架构师学习笔记】- Azure Databricks (12) – Medallion Architecture简介中也提到了lakehouse, 那么现在再深入一下了解ADB 的lakehouse。同时看看Data Lake和Delta Lake之间的区别与联系。
Data Lake是一个中央存储库,存储和处理原始数据
Delta Lake则是一个开源的,针对数据存储的“表结构”。对比起Data Lake, 它通过支持ACID,架构演变数据版本控制等多个特性来提升数据存储中的各种能力。
Data Lake 是一个通用术语,描述了数据存储方法。
Delta Lake 是一种特定的开源技术。数据使用delta lake技术存储在delta 表中。使数据更加安全和高性能。这种技术通常就跟lakehouse架构相关联。
在Delta lake中,如果你的data lake包含了非表格数据, 那么还要把它们存进表中。

Data lake

数据湖是把数据环境类比成一个湖(中央存储),有多条河流(数据流)流入到湖中。这些数据流最终都流到同一个地方,无需严格的预定义结构。它的出现主要是应对数据仓库这种需要预定义架构的存储模式。数据仓库对特定的查询进行了性能优化,意味着以牺牲灵活性为代价提高速度。另外由于不同的供应商有专用数据存储格式,意味着你可能会被供应商“绑架”。

相比数据仓库, 数据湖针对灵活性进行优化,对数据存储没有格式要求,同时也支持不需要复杂昂贵的预处理的数据分析。

在这里插入图片描述

数据沼泽

数据湖提供了灵活度和相对低廉的存储价格,各方异构数据都可以简单直接地存储到单一位置。但是当数据不停增长,这样的灵活就可能带来问题,比如文件的版本跟踪,数据架构,数据恢复等。
这种情况将会使得数据湖,退化成数据沼泽。导致下游应用的“数据源”变得不准确或者需要花费大量成本进行清洗才能使用。

Delta Lake

Delta lake 可以运行在已有的data lake 基础架构之上。它把数据以parquet文件格式存储在后台。
从磁盘上看Delta Lake的文件存储将会试一下结构,有文件夹,包含了事务日志,数据的变更记录,delta 表的分区。

your_delta_table/		<-- 	this is the top-level table directory
_delta_log			    <-- 	this is the transaction log which tracks00.json				        all the changes to your data01.json…n.json
file1.parquet			<-- 	these are your Delta table partitions,
file2.parquet				    ordered for maximum query performance
…
fileN.parquet

Delta Lake 相对于 Data Lake的优势

  • ACID: 跟数据库的ACID 类似, 想象一下当你使用集群向Data Lake写入数据,如果此时集群中途崩溃了,数据文件会以损坏或者只有部分存储到datalake上。你需要手动识别并清理这些残缺文件然后重跑。但是对于Delta lake, 则会把整个写操作回退,而不写入到存储上。
  • 性能:Parquet格式文件,在很多大数据应用上都远比其他类型的格式快得多,因为其具有一些如压缩,列存储等特点。同时Delta Lake对其进行了一些改进,使其更加适合lakehouse。
  • 文件搜索:在data lake中读取数据需要先列出所有的文件,非常耗时,特别是云环境这种使用Key-value 存储的文件系统。KV 存储在范围扫描过程中速度远不如其他系统,它更适合精确查找。Delta Lake 则通过预先把路径存储到Parquet的事务日志中,减少全量扫描的开销从而加快文件搜索。
  • 元数据:在Data Lake的parquet 文件存储每个文件关于列的元数据, 这些元数据包含每个行组内列的最大,最小值,每一次查询范围数据都不得不遍历所有文件。在Delta Lake中,对parquet进行了改进把这些元数据独立存储在单个事务日志文件中,减少扫描的范围和数量。
  • 架构演变:由于输入的数据总是在变,你不能总是知道最后数据集的架构,或某种原因你需要增减列。在Delta lake中通过write.option(“mergeSchema”,“true”)的方式来实现即可。
    除此之外,还有包括版本控制等优点,就不一一列举。

小结

下一文将介绍一下DataBricks在Delta方面的知识。


http://www.ppmy.cn/embedded/170510.html

相关文章

Uniapp使用wxml-to-canvas进行动态页面转图片

参考文章链接&#xff1a;https://www.cnblogs.com/liangtao999/p/16719534.html 官方的链接&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/extended/component-plus/wxml-to-canvas.html 一、引入组件&#xff1a; 1、方法一&#…

洛谷 P11830 省选联考2025 幸运数字 题解

题意 小 X 有 n n n 个正整数二元组 ( a i , b i ) ( 1 ≤ i ≤ n ) (a_i, b_i) (1 \leq i \leq n) (ai​,bi​)(1≤i≤n)。他将会维护初始为空的可重集 S S S&#xff0c;并对其进行 n n n 轮操作。第 i ( 1 ≤ i ≤ n ) i (1 \leq i \leq n) i(1≤i≤n) 轮操作中&#…

SPI硬件设计及通信原理解析

SPI(Serial Peripheral interface,串行外围设备接口),是一种高速的,全双工,同步通信总线。 SPI采用主从控制模式(Master--Slave)架构,一般有1个主设备、一个或多个从设备,使得主设备可以与多个从设备之间实现片间通信。 SPI在芯片管脚中只占用四根线节约了芯片的管脚…

记一次误禁用USB导致键盘鼠标失灵的修复过程

背景说明 在电脑上插入了一个USB hub&#xff0c;然后弹窗提示&#xff1a;“集线器端口上出现电涌”&#xff0c;点开让选择“重置”或者“关闭”&#xff0c;不小心点了关闭&#xff0c;结果这个usb口就被关了&#xff0c;再插任何东西都没反应&#xff0c;找了很多办法都恢…

前端基础之消息订阅与发布

需要下载npm I pubsub-js 在Student.vue中发送数据 <template> <div class"demo"> <h2 class"title">学生姓名:{{name}}</h2> <h2>学生性别:{{sex}}</h2> <button click"sendStudentName">将学生名给…

Android中的Loader机制

Android中的Loader机制是在Android 3.0版本之后引入的一种异步加载数据的方法。以下是对Android中Loader机制的详细解释&#xff1a; 一、Loader机制的基本概念 Loader是Android提供的一种异步加载数据的机制&#xff0c;它可以在后台线程中执行耗时操作&#xff0c;并在加载…

Java面试知识点总结

目录 基础篇 一、JAVA: 二、JDK ?JRE ?JVM的区别&#xff1a; 三、java的基本数据类型 四、switch默认接受的几种数据类型 五、修饰符的作用 六、Static修饰符 七、final,finally,finalize 三者区别 八、StringBuffer StringBuilder String 区别 九、String的常用方…

前端埋点项目从设计到实现详解

了解前端埋点 前端埋点详解 “前端埋点项目从设计到实现详解”的问题&#xff0c;并且要参考提供的20条证据。首先&#xff0c;我得先理解前端埋点的基本概念和它在项目中的作用。根据证据&#xff0c;前端埋点主要是通过在代码中嵌入脚本来收集用户行为数据&#xff0c;比如点…