與Databricks的Delta湖,你可以建立一個lakehouse架構它將數據湖和數據倉庫的最佳部分結合在一個簡單和開放的平台上,存儲和管理所有的數據,並支持所有的分析和人工智能用例。Beplay体育安卓版本
在這個演示中,我們將介紹Delta Lake的主要特性,包括統一的批處理和流數據處理,模式執行和演進,時間旅行,以及對更新/合並/刪除的支持,以及一些在Databricks上可用的性能增強。
視頻成績單
Delta Lake Demo:簡介
lakehouse是一個簡單而開放的數據平台,用於存儲和管理所有數據,支持所有的Beplay体育安卓版本分析和AI用例。三角洲湖為湖屋提供了開放、可靠、高性能和安全的基礎。
它是一種基於鑲木地板的開源數據格式和事務性數據管理係統,使您的數據湖通過在雲對象存儲頂部實施酸事務而可靠。Delta Lake表統一批處理和流媒體數據處理。最後,Delta Lake設計為100%與Apache Spark兼容TM。因此,很容易轉換現有的數據流水線開始使用Delta Lake,對您的代碼進行最小更改。
單擊以展開抄本→
點擊可折疊文字記錄→
轉換為Delta湖
從Delta Lake開始,在用Spark寫表時,隻需簡單地說“Delta”而不是“Parquet”。您也可以使用Spark SQL來從頭創建一個Delta Lake表,使用create table USING Delta命令。或者可以使用CONVERT TO DELTA命令將現有的Parquet文件轉換為DELTA Lake格式。
現在,我們已經將數據轉換為Delta Lake,讓我們看看表中的數據。在這個表格中,我們有14,705批記錄。你可以在這裏看到數據實際上是什麼樣的。接下來,我將向您展示Delta Lake如何輕鬆地處理批處理和流數據,方法是在同時發生的兩個流讀取操作旁邊設置對我們的Delta Lake表的兩個流寫入操作。
多個並發流讀和寫與三角洲湖
在這裏,我們已經開始了那些讀寫。因此,您可以在此圖表中看到,我們的表中的初始14,705批次記錄仍然存在。但是,新數據現在正在從流A和流B中流傳輸,每秒500條記錄。同時,Delta Lake還可以為此表的一致視圖提供給我們的流讀取查詢,這些讀取查詢是在下下方的可視化。
在此可視化中,您可以隨著時間的推移將新數據傳輸到我們的表中。每個新欄代表一個10秒的窗口,在此期間,流A和Stream B都同時寫入我們的表。此後,這種可視化由我們的表中讀取的流讀取。最後,隻是為了好的措施,我們可以投入批量查詢。
因此,這表明,Delta Lake表可以輕鬆地同時處理多個批處理和流數據的讀取和寫入器。
ACID事務
那麼,這一切是如何實現的呢?這是可能的,因為有ACID事務。Delta Lake使用一個事務日誌作為每個表的所有更改的主記錄。這也決定了在任何時候哪些文件都是表的一部分。您可以在任何時候通過運行DESCRIBE HISTORY命令查看事務日誌,如下所示。
當我們運行這個命令時,您可以看到對表的每次寫入都被原子地記錄為一個流更新。一旦在事務日誌中記錄了一個新的寫操作,我們所有的下遊讀取器現在都將立即在他們的表視圖中包含這個寫操作。因此,在任何時候,每個人都對Delta Lake表的構成達成一致。它們隻是引用事務日誌。
使用Delta Lake簡化您的數據架構
這一切都使得德爾塔湖桌非常強大。在Databricks,我們發現我們的許多客戶能夠使用Delta Lake簡化和流線化他們的整體beplay体育app下载地址數據架構。通過使用Delta Lake表構建一個簡單的多跳數據管道,您可以可靠地將原始批處理和流數據轉換為高質量的結構化數據,多個下遊應用程序和用戶可以一次查詢。從業務ROI的角度來看,這意味著更低的雲計算成本,更少的管理複雜性,更少的時間浪費在修複係統問題(如損壞的數據)上。
模式實施和演化
但Delta Lake所做的遠遠不止是使用ACID事務來組合批處理和流數據。它還提供了模式強製等工具,以保護數據表中的數據質量。如果沒有模式強製,模式不匹配的數據可能會更改表模式,並破壞整個數據管道,導致下行級聯失敗。因此,我們使用模式強製來確保這種情況不會發生。
但是Schema實施是不夠的。如果我們要改變我們的表格架構,我們還需要架構演變。使用Delta Lake,通過簡單地將MergeChema選項添加到我們的Spark Write命令,我們可以快速輕鬆地發展我們的架構。當我們運行此命令時,我們可以看到先前失敗的Write命令已成功發生。新的信用評分列現在存在於我們的新表中。
時間旅行
三角洲湖的另一個主要特征是利用時間旅行的能力回到過去,也被稱為數據版本控製。因為對表的每次更改都在事務日誌中記錄為原子事務,所以我們可以使用此信息在任何時間點重新創建表的確切狀態。
時間旅行可以幫助你避免對你的桌子做出不可逆轉的改變。它使您的數據集和實驗可重複,並為審計和治理目的提供可驗證的數據沿襲。
因此,讓我們首先使用前麵看到的DESCRIBE HISTORY命令來查看事務日誌。如你所見,表格的每個版本都是按版本號和時間戳保存的。因此,我們可以使用這些信息來做一些事情,比如查詢表的曆史版本。
我們來做一下。通過將VERSION AS OF命令添加到SQL查詢中,我們的查詢將在數據集的第一個版本(版本0)上運行,並返回14,705條記錄,這與表中最初出現的記錄數量相同。
再往前走一步,我們可以在任何時候使用這裏顯示的RESTORE命令回滾我們的表。如果我們決定對表進行了更改,並且想要完全撤銷,隻需將數據回滾到更早的版本,這就非常有用了。
因此,您可以看到,現在當我們查詢我們的表時,那些原始的14,705個批量記錄是我們表中唯一存在的記錄。版本0已成為當前版本。
三角洲湖DML:更新,合並,刪除
我想為您演示的下一個Delta Lake特性是對事務性DML命令(如UPDATE、MERGE和DELETE)的完全支持。這些SQL命令使操作大數據表變得快速和簡單。在Delta Lake之前,要按照GDPR請求從數據湖中刪除用戶的數據,很難避免數據丟失或損壞的風險。但是有了Delta Lake,我們就可以在一行代碼中以事務的方式刪除用戶的數據。
首先,讓我們查看用戶的數據。我們將選擇貸款ID為4420的用戶。現在,當我們運行這個delete命令時,您可以看到我們的用戶數據以事務方式被成功刪除。
同樣的想法適用於Insert,Update和Merge等其他DML命令。Delta Lake使這些操作真的很簡單,以最少的代碼執行,所有這些都通過酸事務的可靠性來支持。
因此,讓我們繼續使用時間旅行,將該用戶的數據插入我們的表中。當我們運行命令時,我們可以看到現在,我們的表中有一個記錄,其中包含貸款ID 4420。
接下來,讓我們繼續使用單個命令更新用戶的數據。在這裏,我們將使資助金額設置為22,000,與以前相同的用戶,編號4420.運行命令後,我們看到用戶的資助金額已成功更新,因為它現在等於22,000。
最後,Delta Lake還支持upsert,它是插入和更新的混合,使用MERGE命令。通常,合並是一個困難的、昂貴的操作,涉及幾個中間步驟。使用Delta Lake,我們可以跳過所有這些複雜的操作,隻需要使用MERGE命令。
首先,我們將創建一些偽數據來合並 - 具有用戶4420的數據更新的一行,以及要在我們的表中插入的一行新數據。因此,當我們組合在一起我們的合並命令時,我們可以指定在記錄已存在時要更新表,並在沒有時插入它。因此,當我們運行Merge命令時,您可以看到,我們成功更新了用戶4420的數據,並插入了我們的新用戶的數據。
databricks性能優化
最後,在結束之前,我想向您展示幾個額外的命令,它們可以在使用大型Delta Lake表時提高性能。首先是真空指令。VACUUM命令允許我們將當前版本的表不再使用的任何數據文件標記為刪除。
接下來的一對命令隻能在Databricks上使用Delta Lake。首先,有緩存命令,允許您緩存內存中任何常用查詢的結果以加速將來查詢。
最後,這裏顯示的z訂單優化命令,它使用高級多維數據聚類技術來為最快的查詢共同定位相關數據。Z-命令顯著加速許多查詢,並通過啟用更有效的數據來降低雲成本。
所以我們的實踐在Delta湖的演示。今天在Databricks上嚐試Delta湖,並加入在線社區,了解有關Delta Lake如何為您的湖泊架構提供完美基礎的更多信息。
準備好開始了嗎?