共用方式為


轉換資料

本文提供使用 Azure Databricks 轉換數據的簡介和概觀。 轉換數據或準備數據是所有數據工程、分析和 ML 工作負載的關鍵步驟。

本文中的範例模式和建議著重於使用 Delta Lake 支援的 Lakehouse 數據表。 由於 Delta Lake 提供 Databricks Lakehouse 的 ACID 保證,因此當您使用其他格式或數據系統的數據時,您可能會觀察到不同的行為。

Databricks 建議將數據內嵌至原始或幾乎原始狀態的 Lakehouse,然後將轉換和擴充套用為個別的處理步驟。 此模式稱為獎章架構。 請參閱什麼是獎牌 Lakehouse 結構?(機器翻譯)。

如果您知道您需要轉換的數據尚未載入 Lakehouse,請參閱 將數據內嵌至 Databricks Lakehouse。 如果您嘗試尋找 Lakehouse 數據來撰寫轉換,請參閱 探索數據

所有轉換都是從針對數據源撰寫批次或串流查詢開始。 如果您不熟悉查詢數據,請參閱 查詢數據

將轉換的數據儲存到 Delta 數據表之後,您就可以使用該數據表做為 ML 的功能數據表。 請參閱特徵工程與服務

注意

這裡的文章會討論 Azure Databricks 的轉換。 Azure Databricks 也支持連線到許多常見的數據準備平臺。 請參閱 使用合作夥伴 Connect 連線到數據準備合作夥伴。

Spark 轉換與 Lakehouse 轉換

本文著重於定義 轉譯 ,因為它們與 ETL 或 ELT 中的 T 相關。 Apache Spark 處理模型也會以相關方式使用字 組轉換 。 簡單來說:在 Apache Spark 中,所有作業都會定義為轉換或動作。

  • 轉換:將一些處理邏輯新增至計劃。 範例包括讀取數據、聯結、匯總和型別轉換。
  • 動作:觸發處理邏輯來評估和輸出結果。 範例包括寫入、顯示或預覽結果、手動快取或取得數據列計數。

Apache Spark 會使用 延遲執行 模型,這表示在觸發動作之前,不會評估作業集合所定義的邏輯。 此模型在定義數據處理管線時具有重要的影響:僅使用動作將結果儲存回目標數據表。

因為動作代表優化邏輯的處理瓶頸,因此 Azure Databricks 在 Apache Spark 中已存在的優化專案上新增了許多優化,以確保邏輯的最佳執行。 這些優化會考慮一次由指定動作觸發的所有轉換,並根據數據的實體配置來尋找最佳計劃。 手動快取數據或傳回生產管線中的預覽結果可能會中斷這些優化,並導致成本和延遲大幅增加。

因此,我們可以定義 Lakehouse 轉換 ,以將作業集合套用至一或多個 Lakehouse 數據表,以產生新的 Lakehouse 數據表。 請注意,雖然聯結和匯總等轉換會個別討論,但您可以在單一處理步驟中結合其中許多模式,並信任 Azure Databricks 上的優化工具,以找出最有效率的計劃。

串流和批處理之間的差異為何?

雖然串流和批處理在 Azure Databricks 上使用許多相同的語法,但每個語法都有自己的特定語意。

批處理可讓您定義明確的指示,以將固定數量的靜態、非變更的數據當作單一作業來處理。

串流處理可讓您針對未系結且持續成長的數據集定義查詢,然後以小型累加批次處理數據。

Azure Databricks 上的批次作業會使用 Spark SQL 或 DataFrame,而串流處理則利用結構化串流。

您可以藉由查看讀取和寫入作業,區分批次 Apache Spark 命令與結構化串流,如下表所示:

Apache Spark 結構化串流
讀取 spark.read.load() spark.readStream.load()
寫入 spark.write.save() spark.writeStream.start()

具體化檢視通常符合批處理保證,不過差異實時數據表是用來盡可能累加計算結果。 具體化檢視傳回的結果一律相當於邏輯的批次評估,但 Azure Databricks 會盡可能累加地處理這些結果。

串流數據表一律會以累加方式計算結果。 因為許多串流數據源只會保留一段時間或數天的記錄,串流數據表所使用的處理模型會假設數據源中的每個記錄批次只會處理一次。

Azure Databricks 支援使用 SQL 在下列使用案例中撰寫串流查詢:

  • 使用 Databricks SQL 在 Unity 目錄中定義串流數據表。
  • 定義 Delta Live Tables 管線的原始程式碼。

注意

您也可以使用 Python 結構化串流程式代碼,在 Delta 實時資料表中宣告串流數據表。

批次轉換

批次轉換會在特定時間點對一組定義完善的數據資產運作。 批次轉換可能是一次性作業,但通常是定期執行的排程作業或管線的一部分,以便讓生產系統保持最新狀態。

累加轉換

累加模式通常假設數據源是附加的,而且具有穩定的架構。 下列文章提供體驗更新、刪除或架構變更之資料表上累加轉換細微差別的詳細資料:

實時轉換

Delta Lake 擅長為查詢 Lakehouse 的所有使用者和應用程式提供近乎即時的大量數據存取,但由於將檔案和元數據寫入雲端物件記憶體的額外負荷,許多寫入 Delta Lake 接收的工作負載都無法達到真正的實時延遲。

針對極低延遲的串流應用程式,Databricks 建議選擇專為 Kafka 等即時工作負載設計的來源和接收系統。 您可以使用 Azure Databricks 來擴充數據,包括匯總、跨串流聯結,以及聯結串流數據,以及緩時變更儲存在 Lakehouse 中的維度數據。