Delta Lake 是經過優化的儲存層,為 Databricks 平台上的 lakehouse 中的資料表奠定基礎。 Delta Lake 是 開放原始碼 軟體,其會使用以檔案為基礎的事務歷史記錄來擴充 Parquet 數據檔,以進行 ACID 交易和可調整的元數據處理。 Delta Lake 與 Apache Spark API 完全相容,且已針對與結構化串流緊密整合而開發,可讓您輕鬆地針對批次和串流作業使用單一數據複本,並提供大規模增量處理。
Delta Lake 是 Azure Databricks 上所有作業的預設格式。 除非另有說明,Azure Databricks 上的所有資料表皆為 Delta Lake 資料表。 Databricks 最初開發 Delta Lake 通訊協定,並繼續積极參與 開放原始碼 專案。 Databricks 平臺中的許多優化和產品都是以 Apache Spark 和 Delta Lake 所提供的保證為基礎而建置的。 如需 Azure Databricks 優化的資訊,請參閱 Azure Databricks 上的優化建議。
如需 Delta Lake SQL 命令的參考資訊,請參閱 Delta Lake 語句。
Delta Lake 事務歷史記錄具有定義完善的開放式通訊協定,可供任何系統用來讀取記錄。 請參閱 Delta 交易日誌協定。
開始使用 Delta Lake
Azure Databricks 上的所有表格預設都是 Delta Lake 表格。 無論您是使用 Apache Spark DataFrames 或 SQL,只要將資料儲存至具有預設設定的 Lakehouse,即可取得 Delta Lake 的所有優點。
關於基本 Delta Lake 操作的範例,例如建立資料表、讀取、寫入及更新資料,請參閱 教學:建立與管理 Delta Lake 資料表。
關於 Databricks 的建議與使用 Delta Lake 的最佳實務,請參見 「最佳實務:Delta Lake」。
將數據轉換並導入至 Delta Lake
Azure Databricks 有許多功能,能加速並簡化將資料載入你的湖屋。
| 方法 | Description |
|---|---|
| 教學:使用 Lakeflow 管線建立 ETL 管線 | 利用 Lakeflow 管線建立端對端的 ETL 管線。 |
| 設定從Azure Data Lake Storage開始的增量匯入 | 使用 Auto Loader 和 Lakeflow 管線,從雲端儲存設定增量資料擷取。 |
| 串流數據表 | 在 Lakeflow 管線中,使用串流表進行僅追加資料擷取和低延遲串流處理。 |
| 開始使用 COPY INTO 載入資料 | 用 SQL 從雲端儲存以漸進式且冪性的方式載入資料。 |
| 什麼是自動裝載機? | 當檔案到達時,以增量方式從雲端儲存擷取檔案。 |
| 使用檔案上傳建立或修改數據表 | 從 Azure Databricks 介面上傳檔案並建立表格。 |
| 逐步將Parquet和Apache Iceberg表格複製到Delta Lake | 以增量方式將 Parquet 或 Apache Iceberg 資料表複製至 Delta Lake。 |
| 改為三角洲湖 | 將 Parquet 或 Apache Iceberg 資料表一次性轉換為 Delta Lake。 |
| 技術合作夥伴 | 將第三方合作夥伴與工具連結至您的 Azure Databricks 湖屋。 |
如需擷取選項的完整清單,請參閱 Lakeflow Connect 中的標準連接器。
更新和修改 Delta Lake 數據表
使用 Delta Lake 的原子交易讓你可以使用多種方式來更新資料和元資料。 為避免損壞資料表,Databricks 建議避免直接與 Delta Lake 檔案目錄中的資料與交易日誌檔案互動。
| 行動 | Description |
|---|---|
| 利用合併將 Upsert 轉為 Delta Lake 表格 | 利用合併操作將資料上傳到 Delta Lake 資料表。 |
| 選擇性地覆寫 Delta Lake 的資料 | 根據篩選條件和分割區覆寫資料子集。 |
| 透過結構演進更新資料表結構 | 手動或自動更新你的資料表結構,不要重寫資料。 |
| 使用 Delta Lake 欄位對應重新命名和刪除列 | 在不重寫資料的情況下,重新命名或刪除欄位。 |
Delta Lake 上的增量和串流工作負載
Delta Lake 已針對 Azure Databricks 上的結構化串流進行優化。 Lakeflow 管線 透過簡化基礎設施部署、增強擴展性及管理數據依賴,擴展內建功能。
| Feature | Description |
|---|---|
| Delta Lake 資料表的串流讀取和寫入 | 使用 Delta Lake 表格作為結構化串流的來源和接收端,並搭配 readStream 和 writeStream。 |
| 在 Azure Databricks 上使用變更資料摘要 | 追蹤 Delta Lake 或 Apache Iceberg v3 表格不同版本間的列級變化。 |
查詢舊版的數據表
每次寫入 Delta Lake 資料表都會建立一個新的資料表版本。 您可以使用事務歷史記錄來檢閱數據表的修改,並查詢先前的數據表版本。 請參見 使用表格歷史記錄。
Delta Lake 架構增強功能
Delta Lake 會驗證寫入的架構,確保寫入數據表的所有數據都符合您設定的需求。
| Feature | Description |
|---|---|
| 架構強制執行 | 透過寫入時強制執行結構來驗證資料品質。 |
| Azure Databricks 中的條件約束 | 套用強制完整性約束以及資訊主鍵、外鍵和唯一限制。 |
| Delta Lake 生成的欄位 | 利用使用者自訂函式自動產生欄位值。 |
| 以自訂元資料豐富資料 | 在表格和欄位中加入註解和自訂元資料,以豐富資料發現。 |
使用 Delta Lake 管理檔案和編製數據索引
Azure Databricks 會為 Delta Lake 設定許多預設參數,以影響數據檔的大小和記錄中保留的數據表版本數目。 Delta Lake 使用元數據剖析和實體數據配置的組合,以減少掃描以完成任何查詢的檔案數目。
| Feature | Description |
|---|---|
| 針對數據表使用液體叢集 | 簡化資料版面並優化查詢效能,避免使用液態叢集分割。 |
| 資料跳過 | 在查詢時,利用欄位統計、Z 順序及優化資料配置跳過無關檔案。 |
| 優化數據檔配置 | 壓縮小型資料檔案以提升查詢效能。 |
| 使用真空移除未使用的數據檔 | 移除過時的資料檔案以降低儲存成本。 |
| 搭配自動存留時間(TTL)的資料列自動刪除 | 在可設定的時間段後自動刪除受管理資料表的列。 |
| 控制資料檔案大小 | 手動控制目標檔案大小或啟用自動檔案大小調整。 |
設定和檢閱 Delta Lake 設定檔
Azure Databricks 會將 Delta Lake 數據表的所有數據和元數據儲存在雲端物件記憶體中。 您可以在資料表層級或 Spark 工作階段內設定許多組態。 你可以查看 Delta Lake 表格的細節,了解設定了哪些選項。
| Feature | Description |
|---|---|
| 使用 describe detail 查看表格細節 | 使用指令 DESCRIBE DETAIL 查看表格配置與元資料。 |
| 資料表屬性參考 | Delta Lake 表格可用資料表屬性參考列表。 |
使用 Delta Lake 與 Lakeflow 管線的資料管線
Azure Databricks 鼓勵使用者利用 獎章架構,在清理和擴充數據時,透過一系列數據表處理數據。 Lakeflow 管線 透過優化執行及自動化基礎設施部署與擴展,簡化了 ETL 工作負載。
Delta Lake 功能相容性
並非所有 Delta Lake 功能都在 Databricks Runtime 的所有版本中。 如需 Delta Lake 版本設定的相關信息,請參閱 Delta Lake 功能相容性和通訊協定。
Delta Lake API 文件
對於大多數 Delta Lake 資料表的讀寫操作,你可以使用 Spark SQL 或 Apache Spark DataFrame API。
如需 Delta Lake 特定的 SQL 語句,請參閱 Delta Lake 語句。
Azure Databricks 可確保與 Databricks Runtime 中 Delta Lake API 的二進位相容性。 若要檢視每個 Databricks Runtime 版本中封裝的 Delta Lake API 版本,請參閱 Databricks Runtime 版本資訊中相關文章的系統環境一節。 如需適用於 Python、Scala 和 Java 的 Delta Lake API 檔,請參閱 OSS Delta Lake 檔。