共用方式為


什麼是 DLT?

注意

DLT 需要 高級方案。 如需詳細資訊,請連絡 Databricks 帳戶小組。

DLT 是一種宣告式架構,旨在簡化可靠且可維護的擷取、轉換和載入管線的建立。 您可以指定要擷取哪些數據,以及如何轉換數據,DLT 會將管理數據管線的重要層面自動化,包括協調流程、計算管理、監視、數據品質強制執行和錯誤處理。

DLT 建置在 Apache Spark 上,而不是使用一系列個別的 Apache Spark 工作來定義您的數據管線,而是定義系統應該建立的串流數據表和具體化檢視,以及填入和更新這些串流數據表和具體化檢視所需的查詢。

若要深入瞭解使用 DLT 建置和執行 ETL 管線的優點,請參閱 DLT 產品頁面

與 Apache Spark 相比,DLT 的 優點

Apache Spark 是多功能的開放原始碼整合分析引擎,包括 ETL。 DLT 建置在Spark上,以解決特定和常見的ETL處理工作。 當您的需求包含這些處理工作時,DLT 可以大幅加速您的生產路徑,包括:

  • 從一般來源匯入資料。
  • 以累加方式轉換數據。
  • 執行異動數據擷取 (CDC)。

不過,DLT 不適合實作某些類型的程序邏輯。 例如,寫入外部數據表或包含在外部檔案記憶體或資料庫數據表上運作的條件式等處理需求,無法在定義 DLT 資料集的程式代碼內執行。 若要實作 DLT 不支持的處理,Databricks 建議使用 Apache Spark,或在 Databricks 作業中包含管線,以在不同的作業工作中執行處理。 請參閱 DLT 管線工作以查看作業

下表比較 DLT 與 Apache Spark:

能力 DLT Apache Spark
數據轉換 您可以使用 SQL 或 Python 轉換資料。 您可以使用 SQL、Python、Scala 或 R 來轉換資料。
漸進數據處理 許多數據轉換都會以累加方式自動處理。 您必須判斷哪些數據是新的,以便以累加方式處理。
協調 轉換會依正確的順序自動執行。 您必須確定不同的轉換會以正確的順序執行。
排比 所有轉換都會以正確的平行處理等級執行。 您必須使用線程或外部協調器,以平行方式執行不相關的轉換。
錯誤處理 系統會自動重試失敗的操作。 您必須決定如何處理錯誤和重試。
監測 計量和事件會自動記錄。 您必須撰寫程式代碼來收集執行或資料質量的相關計量。

DLT 的重要概念

下圖顯示 DLT 管線的重要元件,後面接著每個元件的說明。

DLT 重要概念。

串流數據表

串流數據表是一個 Delta 數據表,其中包含一或多個寫入它的數據流。 串流數據表通常用於擷取,因為它們只會處理一次輸入數據,而且可以處理大量僅限附加的數據。 串流數據表也適用於大量數據流的低延遲轉換。

具現化視圖

具體化檢視是一種檢視,其包含基於定義該具體化檢視的查詢而預先計算的記錄。 具體化檢視中的紀錄會依據管線的更新排程或觸發器,由DLT自動保持最新狀態。 每次更新具體化檢視時,保證會有與針對可用最新數據執行定義查詢相同的結果。 不過,這通常不需要從頭開始重新計算完整的結果,而是使用 累加式更新。 具體化檢視通常用於轉換。

觀看次數

Azure Databricks 中所有 檢視表在查詢來源數據集時會自動從中計算結果,並在可能時利用快取進行優化。 DLT 不會將視圖發佈至目錄,因此只能在定義視圖的管道中引用它們。 檢視對於不應該公開給用戶或系統的中繼查詢很有用。 Databricks 建議使用檢視來強制執行數據品質條件約束,或轉換和擴充驅動多個下游查詢的數據集。

管道

管線是串流數據表和具體化檢視的集合,這些檢視會一起更新。 這些串流數據表和具體化檢視會在 Python 或 SQL 原始程式檔中宣告。 資料處理管線也包含設定,定義在管線執行時用來更新串流表和具體化檢視表的運算資源。 類似於 Terraform 範本如何定義雲端帳戶中的基礎結構,DLT 管線會定義數據處理的數據集和轉換。

DLT 數據集如何處理數據?

下表描述具體化檢視、串流數據表和檢視表處理數據的方式:

數據集類型 如何透過已定義的查詢處理記錄?
串流數據表 每筆記錄都會只處理一次。 這假設資料來源僅能添加。
具體化檢視 記錄會視需要進行處理,以傳回目前數據狀態的準確結果。 具體化檢視應該用於數據處理工作,例如轉換、匯總或預先計算速度緩慢的查詢和常用的計算。
查看 每次查詢檢視時,記錄都會被處理。 使用檢視來進行中間轉換和數據質量檢查,這些不應當發佈至公共數據集。

在 DLT 中宣告您的第一個數據集

DLT 引進 Python 和 SQL 的新語法。 若要瞭解管線語法的基本概念,請參閱 使用 Python 開發管線程序代碼,並使用 SQL 開發管線程式代碼

注意

DLT 會將數據集定義與更新處理區隔開,而 DLT 筆記本不適用於互動式執行。

如何設定 DLT 管線?

DLT 管線的設定分為兩大類:

  1. 定義使用 DLT 語法宣告數據集之筆記本或檔案集合的組態(稱為 原始程式碼)。
  2. 控制管線基礎結構、相依性管理、如何處理更新,以及如何將數據表儲存在工作區中的設定。

大部分的組態都是選擇性的,但有些組態需要謹慎注意,尤其是在設定生產管線時。 這些包括下列各項:

  • 若要在管線外部提供數據,您必須宣告 目標架構,以發佈至Hive中繼存放區或 目標目錄,並 目標架構 發佈至 Unity 目錄。
  • 數據訪問許可權是透過用於執行的叢集來設定。 請確定叢集已針對數據源和目標 儲存位置設定適當的許可權,如果指定的話。

如需使用 Python 和 SQL 撰寫管線原始碼的詳細資訊,請參閱 DLT SQL 語言參考DLT Python 語言參考

如需管線設定和組態的詳細資訊,請參閱 設定 DLT 管線

部署您的第一個管線(pipeline)並觸發更新

使用 DLT 處理數據之前,您必須設定管線。 設定管線之後,您可以觸發更新來計算管線中每個數據集的結果。 若要開始使用 DLT 管線,請參閱 教學課程:執行您的第一個 DLT 管線

什麼是管線更新?

當您啟動 更新時,管線會部署基礎結構並重新計算數據狀態。 更新會執行下列動作:

  • 使用正確的組態啟動叢集。
  • 探索定義的所有數據表和檢視,並檢查是否有任何分析錯誤,例如無效的數據行名稱、遺漏相依性和語法錯誤。
  • 使用最新的可用數據,建立或更新數據表和檢視。

視使用案例的成本和延遲需求而定,管線可以持續執行或依排程執行。 請參閱 在 DLT 管線上執行更新。

使用 DLT 導入數據

DLT 支援 Azure Databricks 中所有可用的數據源。

Databricks 建議針對大部分的擷取使用案例使用串流數據表。 對於抵達雲端物件儲存的檔案,Databricks 建議使用 Auto Loader。 您可以從大部分的訊息總線直接內嵌 DLT 數據。

如需設定雲端記憶體存取權的詳細資訊,請參閱 雲端記憶體組態

針對自動載入器不支援的格式,您可以使用 Python 或 SQL 來查詢 Apache Spark 所支援的任何格式。 請參閱 使用 DLT載入資料。

監控並強制執行資料品質

您可以使用 預期 來指定資料集內容的數據品質控制。 與傳統資料庫中的特定條件約束 CHECK 不同,這些約束會阻止新增任何不符合約束的記錄,而預期在處理未達數據品質要求的資料時,能提供更大的彈性。 這種彈性可讓您處理並儲存預期會混亂的數據,以及必須符合嚴格品質需求的數據。 請參閱 透過管道中的期望來管理資料品質

DLT 會擴充 Delta Lake 的功能。 由於由 DLT 建立和管理的數據表是 Delta 數據表,因此它們具有 Delta Lake 所提供的相同保證和功能。 請參閱 什麼是 Delta Lake?

DLT 除了可以在 Delta Lake 中設定的許多數據表屬性之外,還新增數個數據表屬性。 請參閱 DLT 屬性參考Delta 資料表屬性參考

如何建立及管理 DLT 的數據表

Azure Databricks 會自動管理使用 DLT 建立的數據表,判斷需要如何處理更新,以正確計算數據表的目前狀態,以及執行一些維護和優化工作。

針對大部分作業,您應該允許 DLT 處理目標資料表的所有更新、插入和刪除。 如需詳細資料和限制,請參閱 保留手動刪除或更新

DLT 所執行的維護工作

DLT 會在更新數據表的 24 小時內執行維護工作。 維護可以藉由移除舊版數據表來改善查詢效能並降低成本。 根據預設,系統會執行完整的 OPTIMIZE 作業,後面接著 VACUUM。 您可以在數據表 資料表屬性 中設定 pipelines.autoOptimize.managed = false,以停用數據表的 OPTIMIZE。 只有在管線更新於排定維護工作前的 24 小時內執行時,才會進行這些維護工作。

Delta Live Tables 現在是 DLT

先前稱為 Delta Live Tables 的產品現在是 DLT。

局限性

如需限制清單,請參閱 DLT 限制

如需搭配 Unity 目錄使用 DLT 的特定需求和限制清單,請參閱 搭配您的 DLT 管線使用 Unity 目錄

其他資源