跳轉到主要內容
公司博客上

高效的插入到數據與磚湖泊三角洲

分享這篇文章

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)對細粒度更新功能。查看功能,注冊一個免費試用的磚和嚐試。

對開源三角洲湖感興趣嗎?
訪問在線三角洲湖中心要了解更多,請下載最新的代碼,並加入三角洲湖社區。

免費試著磚

相關的帖子

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