遷移指南

遷移工作量到達美湖

當您將工作負載遷移到三角洲湖時,與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中的指定位置。

另存為三角洲表

  1. 將鑲木quet數據讀取到數據框中,然後將數據框的內容保存到新目錄中三角洲格式:

    數據=火花格式((“鑲木”加載((“/Data-Pipeline”數據格式((“三角洲”節省((“/tmp/delta/data-pipeline/”
  2. 創建一個名稱的三角洲表事件這是指新目錄中的文件:

    火花SQL((“使用delta位置創建表事件”/tmp/delta/data-pipeline/'”

轉換為三角洲表

您有三個選擇將鑲木quet表轉換為三角洲表的選項:

  • 將文件轉換為三角洲湖格式,然後創建一個三角洲表:

    兌換三角洲鑲木`//數據-管道/`創造桌子事件使用三角洲地點'/data-pipeline/'
  • 創建一個鑲木quet表,然後將其轉換為三角洲表:

    創造桌子事件使用鑲木選項((小路'/data-pipeline/'兌換三角洲事件
  • 將鑲木quet表轉換為三角洲表:

    兌換三角洲事件

    這是假定桌子命名的事件是鑲木桌。

有關詳細信息,請參閱生成清單文件