什麼是差異即時資料表?
Delta Live Tables 是一種宣告式架構,可建置可靠、可維護且可測試的資料處理管線。 您可以定義要對數據執行的轉換,而 Delta 即時數據表會管理工作協調流程、叢集管理、監視、數據品質及錯誤處理。
注意
Delta Live Tables 需要 進階方案。 如需更多資訊,請聯絡您的 Databricks 客戶團隊。
您會定義系統應該建立並保持最新狀態的串流資料表和具體化檢視,而不需使用一系列個別的 Apache Spark 工作來定義資料管線。 Delta Live Tables 會根據您針對每個處理步驟定義的查詢來管理數據轉換的方式。 您也可以使用 Delta Live Tables 預期來強制執行數據品質,這可讓您定義預期的數據品質,並指定如何處理那些期望失敗的記錄。
若要深入瞭解使用 Delta Live Tables 建置和執行 ETL 管線的優點,請參閱 Delta Live Tables 產品頁面。
什麼是 Delta Live Tables 數據集?
Delta Live Tables 數據集是串流數據表、具體化檢視和檢視,會維護為宣告式查詢的結果。 下表描述每個資料集的處理方式:
資料集類型 | 如何透過已定義的查詢處理記錄? |
---|---|
串流資料表 | 每筆記錄都會只處理一次。 這會假設是僅限附加的來源。 |
具體化檢視 | 記錄會視需要進行處理,以傳回目前數據狀態的準確結果。 具體化檢視應該用於數據處理工作,例如轉換、匯總或預先計算速度緩慢的查詢和常用的計算。 |
檢視 | 每次查詢檢視時,都會處理記錄。 針對不應該發佈至公用數據集的中繼轉換和數據品質檢查使用檢視。 |
下列各節提供每個數據集類型的更詳細描述。 若要深入瞭解如何選取數據集類型以實作數據處理需求,請參閱 何時使用檢視、具體化檢視和串流數據表。
串流數據表
串 流數據表是 Delta 數據表 ,可額外支援串流或累加數據處理。 串流數據表可讓您處理成長的數據集,只處理每個數據列一次。 由於大部分資料集會隨著時間持續增長,因此串流資料表適合大部分擷取工作負載。 串流資料表最適合需要資料新鮮度和低延遲的管線。 串流資料表也可用於大規模轉換,因為可以在新資料到達時以累加方式計算結果,讓結果保持最新狀態,而不需要在每次更新時完全重新計算所有來源資料。 串流資料表是針對僅附加的資料來源而設計。
注意
雖然根據預設,串流數據表需要僅附加數據源,但當串流來源是另一個需要更新或刪除的串流數據表時,您可以使用skipChangeCommits旗標覆寫此行為。
具體化檢視
具體化檢視是預先計算結果的檢視。 具體化檢視會根據包含這些檢視的管線更新排程來重新整理。 具體化檢視很強大,因為它們可以處理輸入中的任何變更。 每次管線更新時,查詢結果都會重新計算,以反映因為合規性、更正、匯總或一般 CDC 而可能發生的上游數據集變更。 Delta 即時數據表實作具體化檢視做為差異數據表,但會抽象化與更新的有效應用相關聯的複雜度,讓使用者專注於撰寫查詢。
檢視
Azure Databricks 中的所有檢視都會在查詢來源數據集時計算結果,並在可用時利用快取優化。 Delta Live Tables 不會將檢視發佈至目錄,因此只能在定義檢視的管線內參考檢視。 檢視對於不應該公開給用戶或系統的中繼查詢很有用。 Databricks 建議使用檢視來強制執行數據品質條件約束,或轉換和擴充驅動多個下游查詢的數據集。
在 Delta Live Tables 中宣告您的第一個數據集
Delta Live Tables 引進 Python 和 SQL 的新語法。 若要開始使用 Delta Live Tables 語法,請參閱教學課程:執行第一個 Delta Live Tables 管線中的 Python 和 SQL 範例。
注意
Delta Live Tables 會分隔數據集定義與更新處理,而 Delta Live Tables 筆記本不適用於互動式執行。 請參閱什麼是 Delta Live Tables 管線?。
什麼是 Delta Live Tables 管線?
管線是用來設定和執行具有 Delta Live Tables 之數據處理工作流程的主要單位。
管線包含 Python 或 SQL 原始程式檔中宣告的具體化檢視和串流數據表。 Delta Live Tables 會推斷這些數據表之間的相依性,確保更新會依正確順序進行。 針對每個數據集,Delta Live Tables 會比較目前狀態與所需的狀態,然後繼續使用有效率的處理方法來建立或更新數據集。
Delta Live Tables 管線的設定分為兩大類:
- 定義使用 Delta Live Tables 語法宣告數據集之筆記本或檔案集合(稱為 原始程式碼)的組態。
- 控制管線基礎結構、相依性管理、如何處理更新,以及如何將數據表儲存在工作區中的設定。
大部分的組態都是選擇性的,但有些組態需要謹慎注意,尤其是在設定生產管線時。 其中包括下列各項:
- 若要在管線外部提供數據,您必須宣告 目標架構 以發佈至Hive中繼存放區或 目標目錄 和 目標架構 ,才能發佈至 Unity 目錄。
- 數據訪問許可權是透過用於執行的叢集來設定。 請確定叢集已針對數據源和目標 記憶體位置設定適當的許可權,如果指定的話。
如需使用 Python 和 SQL 撰寫管線原始碼的詳細資訊,請參閱 Delta Live Tables SQL 語言參考 和 Delta Live Tables Python 語言參考。
如需管線設定和組態的詳細資訊,請參閱 設定 Delta Live Tables 管線。
部署您的第一個管線和觸發程式更新
使用 Delta Live Tables 處理數據之前,您必須先設定管線。 設定管線之後,您可以觸發更新來計算管線中每個數據集的結果。 若要開始使用 Delta Live Tables 管線,請參閱 教學課程:執行您的第一個 Delta Live Tables 管線。
什麼是管線更新?
管線會在您啟動 更新時部署基礎結構並重新計算數據狀態。 更新會執行下列動作:
- 使用正確的設定啟動叢集。
- 探索定義的所有資料表和檢視,並檢查是否有任何分析錯誤,例如無效的資料行名稱、遺漏相依性和語法錯誤。
- 使用最新的可用資料,建立或更新資料表和檢視。
視使用案例的成本和延遲需求而定,管線可以持續執行或依排程執行。 請參閱 在 Delta Live Tables 管線上執行更新。
使用 Delta 即時數據表內嵌數據
Delta Live Tables 支援 Azure Databricks 中所有可用的數據源。
Databricks 建議針對大部分的擷取使用案例使用串流數據表。 對於抵達雲端物件記憶體的檔案,Databricks 建議自動載入器。 您可以從大部分訊息總線直接內嵌差異實時數據表的數據。
如需設定雲端記憶體存取權的詳細資訊,請參閱 雲端記憶體設定。
針對自動載入器不支援的格式,您可以使用 Python 或 SQL 來查詢 Apache Spark 所支援的任何格式。 請參閱 使用差異實時數據表載入資料。
監視及強制執行數據品質
您可以使用 預期 來指定資料集內容的數據品質控制。 CHECK
不同於傳統資料庫中會防止新增任何失敗條件約束的記錄的條件約束,預期會在處理數據品質需求失敗的數據時提供彈性。 這種彈性可讓您處理並儲存預期會混亂的數據,以及必須符合嚴格品質需求的數據。 請參閱使用 Delta Live Tables 管理資料品質 (機器翻譯)。
Delta Live Tables 和 Delta Lake 如何相關?
Delta Live Tables 擴充 Delta Lake 的功能。 由於由 Delta Live Tables 建立和管理的數據表是 Delta 數據表,因此它們具有 Delta Lake 所提供的相同保證和功能。 請參閱什麼是 Delta Lake?。
Delta Live Tables 除了可以在 Delta Lake 中設定的許多數據表屬性之外,也會新增數個數據表屬性。 請參閱 Delta Live Tables 屬性參考 和 Delta 資料表屬性參考。
如何建立及管理差異實時數據表的數據表
Azure Databricks 會自動管理使用 Delta Live Tables 所建立的數據表,判斷需要如何處理更新,以正確計算數據表的目前狀態,以及執行一些維護和優化工作。
針對大部分作業,您應該允許 Delta Live Tables 處理目標數據表的所有更新、插入和刪除。 如需詳細數據和限制,請參閱 保留手動刪除或更新。
Delta Live Tables 所執行的維護工作
Delta Live Tables 會在更新數據表的 24 小時內執行維護工作。 維護可以藉由移除舊版數據表來改善查詢效能並降低成本。 根據預設,系統會執行完整的 OPTIMIZE 作業,後面接著 VACUUM。 您可以在資料表的數據表屬性中設定 pipelines.autoOptimize.managed = false
,以停用資料表的 OPTIMIZE。 只有當管線更新在排程維護工作之前 24 小時內執行時,才會執行維護工作。
限制
適用下列限制:
- Delta Live Tables 所建立和更新的所有數據表都是 Delta 數據表。
- Delta Lake 時間移動查詢僅支援串流數據表,而且 不支援 具體化檢視。 請參閱使用 Delta Lake 資料表歷程記錄。
- Delta Live Tables 數據表只能定義一次,這表示它們只能是所有 Delta Live Tables 管線中單一作業的目標。
- 身分識別數據行不支援做為目標的
APPLY CHANGES INTO
數據表,而且可能會在具體化檢視更新期間重新計算。 基於這個理由,Databricks 建議只搭配串流數據表使用 Delta Live Tables 中的識別數據行。 請參閱 在 Delta Lake 中使用識別數據行。 - Azure Databricks 工作區限制為 100 個並行管線更新。
如需搭配 Unity 目錄使用 Delta Live Tables 的特定需求和限制清單,請參閱 搭配您的 Delta Live Tables 管線使用 Unity 目錄
其他資源
- Delta Live Tables 在 Databricks REST API 中具有完整支援。 請參閱 DLT API。
- 如需管線和數據表設定,請參閱 Delta Live Tables 屬性參考。
- Delta Live Tables SQL 語言參考。
- Delta Live Tables Python 語言參考。