跳转到主要内容
公司博客上

高效的插入到数据与砖湖泊三角洲

分享这篇文章

O ' reilly的早期预览版的新电子书一步一步指导你需要开始使用三角洲湖。


简化构建大数据管道变化数据捕获(CDC)和GDPR用例。

砖三角洲湖,下一代引擎之上的Apache引发™,现在支持MERGE命令,你可以有效地插入和删除记录数据的湖泊。合并极大地简化了如何建造一些公共数据管道;所有复杂的种过程效率低下重写整个分区现在可以被简单的合并查询。这种细粒度更新功能简化了如何构建大数据管道各种用例从GDPR变化数据捕获。

需要插入不同的用例

有许多共同使用的情况下,现有的数据在数据需要更新或者删除:湖

  • 通用数据保护监管(GDPR)合规:通过引入权被遗忘在GDPR(也称为数据擦除),组织必须删除一个用户的信息要求。这个数据擦除包括删除用户信息数据的湖泊。
  • 变化数据捕获从传统数据库:在面向服务的体系结构,典型的web和移动应用程序是由microservices建立在传统SQL / NoSQL数据库优化的低延迟。最大的挑战之一是加入数据组织面临各种孤立的数据系统,因此工程师构建管道巩固所有数据源的数据到一个湖中央数据,便于分析。这些管道通常必须定期阅读传统的SQL / NoSQL表上更改并将它们应用到相应的表中数据湖。这种变化可以采取多种形式:表缓慢变化维度,变化数据捕获所有的插入/更新/删除行,等等。
  • Sessionization:多个事件分组到单个会话是一种常见的用例在许多领域从产品分析定向广告预测性维护。构建连续应用程序来跟踪会议和记录结果写入数据的湖泊是困难的,因为数据一直为附加数据优化。
  • 重复数据删除:常见的数据管道用例是收集系统日志到砖三角洲表通过添加数据表。然而,通常来源可以生成重复的记录和下游重复数据删除步骤需要照顾他们。

插入到数据湖泊的挑战

从湖泊从根本上是基于文件的数据,他们总是比改变现有数据优化的附加数据。因此,建立上述用例一直是具有挑战性的。用户通常阅读整个表(或分区)的一个子集,然后覆盖它们。因此,每个组织试图重新发明轮子的要求书写复杂查询的SQL,火花,等。这种方法是:

  • 效率:阅读和重写整个分区(或整个表)来更新一些记录导致管道是缓慢而昂贵。手工调整的表布局和查询优化是乏味的,需要深厚的领域知识。
  • 很有可能是不正确的:手写代码修改数据很容易逻辑和人类的错误。例如,多个管道同时修改相同的表没有任何事务支持会导致不可预测的数据不一致,在最坏的情况下,数据的损失。通常,甚至一个手写的管道很容易导致数据错误导致错误编码的业务逻辑。
  • 很难维持:从根本上很难理解这样的手写代码,跟踪和维护。从长远来看,仅这一点就可显著提高组织和基础设施成本。

介绍合并在砖三角洲

与砖三角洲,您可以很容易地解决上述用例没有任何上述问题合并使用以下命令:

合并使用(匹配(]然后](匹配(]然后](匹配(]然后]在哪里=删除|更新*|更新column1=value1 [, column2=value2…]=插入*|插入(column1 [column2…)(value1, value2……)

看到我们的文档(Azure|AWS)更详细的解释语法。

让我们了解如何使用合并用一个简单的例子。假设您有一个缓慢变化维度表,维护用户信息,如地址。此外,你有一个表的新地址为现有的和新的用户。合并所有的新地址到主用户表,您可以运行下面的:

合并用户使用更新users.userId=updates.userId匹配然后更新地址=updates.addresses匹配然后插入(userId,地址)(更新。用户标识,更新.address)

这将为现有用户执行什么语法说——(例如匹配子句),它将更新地址列,新用户(即不匹配子句)将插入的所有列。TBs的大型表的数据,这个数据砖δ合并操作可以数量级的速度比覆盖整个分区或表,因为三角洲只读取相关文件和更新。具体来说,达美航空的合并有以下优点:

  • 细粒度:操作重写数据粒度的文件而不是分区。这就消除了重写的所有并发症分区,更新蜂巢metastore MSCK,等等。
  • 高效:三角洲的数据不使合并有效地找到文件改写从而消除需要优化你的管道。此外,三角洲所有I / O和处理优化使所有的读写数据合并明显快于类似的操作在Apache火花。
  • 事务:三角洲使用开放式并发控制来确保并发作家与ACID事务更新数据正确,和并发的读者总是看到一致的快照数据。

这是一个视觉的解释如何合并与手写的管道。


图显示步骤将记录合并到数据有无砖湖三角洲

与合并简化用例

由于GDPR删除数据

遵守“正确的被遗忘”条款的GDPR数据在数据湖泊不能让它变得容易。您可以设置一个简单的计划工作,像下面的示例代码删除所有用户选择你的服务。

合并用户使用opted_out_usersopted_out_users.userId=users.userId匹配然后删除

从数据库应用更改数据

您可以很容易地应用所有数据更改,更新,删除,插入——从外部数据库生成砖三角洲表合并的语法如下:

合并用户使用(选择userId, latest.address作为地址,latest.deleted作为删除(选择用户标识,马克斯(结构体(时间、地址、删除))作为最新的变化集团通过用户标识))latestChangelatestChange.userId=users.userId匹配latestChange.deleted=真正的然后删除匹配然后更新地址=latestChange.address匹配latestChange.deleted=然后插入(userId,地址)(userId,地址)

从流管道更新会话信息

如果你有流事件数据流入和如果你想sessionize流事件数据和增量更新和存储会话数据砖δ表,您可以完成使用结构化的foreachBatch流和合并。例如,假设您有一个结构化流DataFrame计算为每个用户会话信息更新。您可以启动一个流媒体查询所有会话更新适用于三角洲表如下(Scala)。

streamingSessionUpdatesDF.writeStream.foreachBatch {(microBatchOutputDF: DataFrame batchId:长)= >microBatchOutputDF.createOrReplaceTempView (“更新”)microBatchOutputDF.sparkSession.sql (s”“”并入会话使用更新在会话。sessionId = updates.sessionId当匹配更新设置*当不匹配插入*”“”)}.start ()

对于一个完整的工作foreachBatch和合并的例子,看到这个笔记本(Azure|AWS)。

结论

在砖三角洲细粒度更新功能简化了你如何建立你的大数据管道。你不再需要编写复杂的逻辑覆盖表和克服缺乏快照隔离。使用细粒度更新,您的管道也会更有效率,因为你不需要阅读和覆盖整个表。与不断变化的数据,另一个关键能力要求是能够回滚的坏写道。砖三角洲还提供回滚功能时间旅行的特性,如果你做一个坏的合并,您可以轻松地执行回滚。

阅读更多(Azure|AWS)对细粒度更新功能。查看功能,注册一个免费试用的砖和尝试。

对开源三角洲湖感兴趣吗?bob下载地址
访问在线三角洲湖中心要了解BOB低频彩更多,请下载最新的代码,并加入三角洲湖社区。

免费试着砖

相关的帖子

看到所有公司博客上的帖子