遷移指南
遷移工作量到達美湖
當您將工作負載遷移到三角洲湖時,與Apache Spark和Apache Hive提供的數據源相比,您應該意識到以下簡化和差異。
Delta Lake會自動處理以下操作,您永遠不要手動執行:
刷新桌子
:Delta表總是返回最新信息,因此無需手動致電刷新桌子
更改後。
添加和刪除分區:Delta Lake會自動跟蹤表中存在的一組分區,並在添加或刪除數據時更新列表。結果,無需運行
改變桌子[添加| Drop]分割
或者MSCK
。加載單個分區:作為優化,您有時可能會直接加載您感興趣的數據的分區。例如,
spark.read.format(“ parquet”)。負載(“/data/date = 2017-01-01”)
。Delta Lake不必要,因為它可以快速閱讀交易日誌中的文件列表以找到相關的文件。如果您對單個分區感興趣,請使用在哪裏
條款。例如,spark.read.delta(“/data”)。其中(“日期)='2017-01-01'”)
。對於分區中有許多文件的大型表,這比加載單個分區(帶有直接分區路徑,或使用)要快得多在哪裏
)從鑲木quet表中,因為在目錄中列出文件通常比閱讀事務日誌中的文件列表慢。
當您將現有應用程序移植到三角洲湖時,應避免以下操作,該操作繞過交易日誌:
手動修改數據:Delta Lake使用交易日誌來原子對表進行更改。由於日誌是真實的來源,因此未通過SPARK讀取未添加但未添加到事務日誌的文件。同樣,即使您手動刪除文件,交易日誌中仍然存在指向文件的指針。始終使用本指南中描述的命令,而不是手動修改存儲在三角洲表中的文件。
例子
假設您的鑲木quet數據存儲在名稱的目錄中/數據流程
,您想創建一個名稱的三角洲表事件
。
這第一個示例顯示如何:
從其原始位置讀取鑲木quet數據,
/數據流程
,進入數據框。將數據框的內容保存在Delta格式的單獨位置中,
/tmp/delta/data-pipeline/
。創建
事件
表基於該單獨的位置,/tmp/delta/data-pipeline/
。
這第二個示例顯示如何使用兌換至桌子
要將數據從鑲木quet轉換為三角洲格式,而無需更改其原始位置,/Data-Pipeline/
。
這些示例中的每一個都創建了一個不受管理的桌子,您將繼續在其指定位置管理數據。Databricks記錄了該表的名稱及其在Metastore中的指定位置。
另存為三角洲表
將鑲木quet數據讀取到數據框中,然後將數據框的內容保存到新目錄中
三角洲
格式:數據=火花。讀。格式((“鑲木”)。加載((“/Data-Pipeline”)數據。寫。格式((“三角洲”)。節省((“/tmp/delta/data-pipeline/”)
創建一個名稱的三角洲表
事件
這是指新目錄中的文件:火花。SQL((“使用delta位置創建表事件”/tmp/delta/data-pipeline/'”)
轉換為三角洲表
您有三個選擇將鑲木quet表轉換為三角洲表的選項:
將文件轉換為三角洲湖格式,然後創建一個三角洲表:
兌換至三角洲鑲木。`//數據-管道/`創造桌子事件使用三角洲地點'/data-pipeline/'
創建一個鑲木quet表,然後將其轉換為三角洲表:
創造桌子事件使用鑲木選項((小路'/data-pipeline/')兌換至三角洲事件
將鑲木quet表轉換為三角洲表:
兌換至三角洲事件
這是假定桌子命名的
事件
是鑲木桌。
有關詳細信息,請參閱生成清單文件。