与Databricks上的Delta Lake,你可以建立一个lakehouse架构它将数据湖和数据仓库的最佳部分结合在一个简单开放的平台上,存储和管理您的所有数据,并支持您的所有分析和人工智能用例。bob体育客户端下载
在这个演示中,我们将介绍Delta Lake的主要特性,包括统一的批处理和流数据处理、模式强制和演化、时间旅行和对更新/ merge / delete的支持,以及Databricks上Delta Lake提供的一些性能增强。
视频记录
三角洲湖演示:介绍
lakehouse是一个简单开放的数据平台,用于存储和管理所有数据,支持所有分析bob体育客户端下载和人工智能用例。三角洲湖为湖屋提供了开放、可靠、高性能、安全的基础。
它是一种基于Parquet的开源数据格式和事务数据管理系统,通过在云对象存储之上实现ACID事务,使您的数据湖变得可靠。Delta Lake表统一了批处理和流数据处理。最后,Delta Lake被设计成100%与Apache Spark兼容TM.因此,只需对代码进行最小的更改,就可以轻松地将现有的数据管道转换为开始使用Delta Lake。
点击展开文字记录→
点击折叠文本→
转换为三角洲湖
要开始使用Delta Lake,在用Spark写表时,只需说“Delta”而不是“Parquet”。您还可以使用Spark SQL使用create table USING Delta命令从头创建Delta Lake表。或者您可以使用CONVERT TO DELTA命令将现有的Parquet文件转换为DELTA Lake格式。
现在我们已经将数据转换为Delta Lake,让我们看看表中的数据。这个表中有14,705条批记录。你可以看到这里的数据是什么样的。接下来,我将向您展示Delta Lake如何轻松地处理批处理和流数据,方法是在Delta Lake表上设置两个流写入操作和两个同时发生的流读取操作。
使用Delta Lake进行多个并发流读写
在这里,我们已经开始了这些读写操作。因此,正如您在这个图表中看到的,我们表中最初的14,705个批记录仍然存在。但是现在新数据从流A和流B以每秒约500条记录的速度流入。同时,Delta Lake还可以为我们的流读查询提供该表的一致视图,这为下面的可视化提供了支持。
在这个可视化中,您可以看到随着时间的推移,新数据流进入我们的表。每个新栏代表一个10秒的窗口,在此期间流a和流B都在并发地向表写入数据。同样,这个可视化也是由从表中读取的流驱动的。最后,为了更好地度量,我们可以加入一个批处理查询。
因此,这表明Delta Lake表可以轻松地同时处理批处理数据和流数据的多个读取器和写入器。
ACID事务
那么这一切是怎么可能的呢?这是可能的,因为ACID事务。Delta Lake使用事务日志作为对每个表所做的所有更改的主记录。这也决定了哪些文件在任何时候都是表的一部分。您可以在任何时候通过运行如下所示的DESCRIBE HISTORY命令来查看事务日志。
当我们运行这个命令时,您可以看到对表的每次写入都被原子地记录为流更新。一旦在事务日志中记录了一个新的写操作,所有的下游读取器现在都将立即在它们的表视图中包含该写操作。所以每个人总是对Delta Lake桌的构成达成一致。它们只是引用事务日志。
使用Delta Lake简化您的数据架构
这一切使得三角洲湖表非常强大。在Databricks,我们发现我们的许多客户能够使用Delta Lake简化和简化他们的整体数据架构。通过使用Delta Lake表构建简单的多跳数据管道,您可以可靠地将原始批处理和流数据转换为高质量的结构化数据,多个下游应用程序和用户可以同时查询。从业务ROI的角度来看,这意味着更低的云计算成本,更低的管理复杂性,以及更少的时间浪费在修复系统问题(如损坏的数据)上。
模式实施和演进
但是Delta Lake不仅仅使用ACID事务来组合批处理和流数据。它还提供了模式强制等工具来保护数据表中的数据质量。如果没有模式强制,模式不匹配的数据可能会改变表模式并破坏整个数据管道,从而导致下游的级联故障。所以我们使用模式强制来确保这种情况不会发生。
但是仅仅实施模式是不够的。如果我们确实想要更改表模式,我们还需要模式进化。使用Delta Lake,我们只需将mergeSchema选项添加到Spark写命令中,就可以快速轻松地改进模式。当我们运行这个命令时,我们可以看到以前失败的写命令现在已经成功执行了。新的信用评分列现在出现在我们的新表中。
时间旅行
Delta Lake的另一个主要特性是能够使用时间旅行回到过去,也称为数据版本。因为对表的每个更改都记录为事务日志中的原子事务,所以我们可以使用此信息在任何时间点重新创建表的确切状态。
时间旅行可以帮助您避免对表进行不可逆转的更改。它使您的数据集和实验具有可重复性,并为审计和治理目的提供可验证的数据沿袭。
因此,让我们首先使用前面看到的DESCRIBE HISTORY命令查看事务日志。可以看到,表的每个版本都是按版本号和时间戳保存的。我们可以使用这些信息来做一些事情,比如查询表的历史版本。
我们来做一下。通过向我们的SQL查询添加VERSION AS OF命令,我们的查询在数据集的第一个版本(版本0)上运行,并返回14,705的计数,这与最初出现在我们的表中的记录数量相同。
让时间旅行更进一步,我们可以使用这里显示的RESTORE命令在任何时候回滚我们的表。如果我们决定对表进行了更改,并且希望完全撤销更改,并简单地将数据回滚到早期版本,那么这非常有用。
可以看到,现在当我们查询我们的表时,那些原始的14,705条批记录是我们的表中唯一的记录。版本0已变为当前版本。
三角洲湖DML:更新,合并,删除
我想为您演示的下一个Delta Lake特性是对事务性DML命令(如UPDATE、MERGE和DELETE)的完全支持。这些SQL命令使得操作大数据表变得快速和简单。在Delta Lake之前,为了遵守GDPR要求而从数据湖删除用户数据很难在不冒数据丢失或损坏风险的情况下执行。但是使用Delta Lake,我们可以以事务性的方式删除用户的数据,只需一行代码。
首先,让我们查看用户的数据。我们将选择贷款ID为4420的用户。现在,当我们运行这个delete命令时,您可以看到我们的用户数据成功地以事务方式删除了。
同样的想法也适用于其他DML命令,如INSERT、UPDATE和MERGE。Delta Lake使得这些操作非常简单,只需最少的代码即可执行,所有这些操作都由ACID事务的可靠性支持。
让我们继续,使用时间旅行将用户的数据插入到我们的表中。当我们运行这个命令时,我们现在可以看到,实际上,在我们的表中有一个贷款ID为4420的记录。
接下来,让我们继续使用一个命令来更新用户的数据。这里,我们将为相同的用户(4420)设置资助金额为22,000。运行命令后,我们看到用户的出资金额已经成功更新,因为它现在等于22,000。
最后,Delta Lake还使用MERGE命令支持upsert,这是插入和更新的混合。通常,合并是一项困难、昂贵的操作,涉及几个中间步骤。使用Delta Lake,我们可以跳过所有这些复杂性,只需使用MERGE命令。
因此,首先,我们将创建一些要合并的虚拟数据——一行是用户4420的数据更新,一行是要插入到表中的新数据。因此,当我们组合MERGE命令时,可以指定当记录已经存在时更新表,当记录不存在时插入表。因此,当我们运行merge命令时,如您所见,我们成功地更新了用户4420的数据,并插入了新用户的数据。
数据库性能优化
最后,在结束之前,我想向您展示两个额外的命令,它们可以在使用大型Delta Lake表时提高性能。首先是VACUUM命令。VACUUM命令允许我们将当前版本的表不再使用的任何数据文件标记为删除。
接下来的几个命令只能在Databricks上使用Delta Lake。首先是CACHE命令,它允许您在内存中缓存任何经常使用的查询的结果,以便将来加快该查询的速度。
最后,这里显示了Z ORDER OPTIMIZE命令,该命令使用高级多维数据聚类技术来共同定位相关数据,以实现尽可能快的查询。Z-Order通过更有效地读取数据,大大加快了许多查询速度,并降低了云计算成本。
德尔塔湖的演示到此结束。今天就在Databricks上尝试Delta Lake,并加入在线社区,了解更多关于Delta Lake如何为您的湖屋建筑提供完美的基础。BOB低频彩
准备开始了吗?