共用方式為


Azure Databricks 中的封存支援

重要

這項功能適用於 Databricks Runtime 13.3 LTS 和更新版本公開預覽。

Azure Databricks 中的封存支持引進了一系列功能,可讓您在包含 Delta 數據表的雲端物件記憶體上使用雲端式生命周期原則。

重要

Azure Databricks 只支援 Azure 封存。 請參閱 Azure 檔,瞭解如何使用生命週期管理將成本優化。

為什麼要啟用封存支援?

封存支援只允許正確響應的查詢,而不需要觸及封存盤案。 這些查詢包括下列其中一項:

  • 僅查詢元數據。
  • 具有不需要掃描任何封存盤案的篩選條件。

所有需要封存盤案數據的查詢都會失敗。

重要

Azure Databricks 永遠不會傳回要求封存盤案傳回正確結果的查詢結果。

如果沒有封存支援,Delta 資料表的作業可能會中斷,因為數據檔或事務歷史記錄檔已移至封存位置,而且查詢時無法使用。 封存支援引進優化,以避免盡可能查詢封存的數據。 它也會新增語法,以識別必須從封存記憶體還原以完成查詢的檔案。

在 Azure Databricks 中啟用數據表的封存支援,並不會建立或改變針對雲端物件記憶體定義的生命周期原則。 針對想要的結果,您的雲端生命周期原則和 delta.timeUntilArchived 設定應該相等。

針對已封存數據的優化查詢

Azure Databricks 中的封存支持會針對 Delta 數據表優化下列查詢:

Query 新的行為
SELECT * FROM <table_name> LIMIT <limit> [WHERE <partition_predicate>] 自動忽略封存盤案,並從非封存儲存層中的數據傳回結果。
Delta Lake 維護命令:OPTIMIZE、、ZORDERANALYZEPURGE 自動忽略封存檔案,並在數據表其他部分執行維護。
覆寫資料或刪除資料的 DDL 和 DML 語句,包括:REPLACE TABLE、、INSERT OVERWRITETRUNCATE TABLEDROP TABLE 將目標封存資料檔的事務歷史記錄項目標示為已刪除。
FSCK REPAIR TABLE 忽略已封存的檔案,並只檢查尚未達到生命周期原則的檔案。

請參閱限制

早期失敗和錯誤訊息

針對必須掃描封存盤案以產生正確結果的查詢,設定 Delta Lake 的封存支援可確保下列各項:

  • 如果查詢嘗試存取封存盤案、減少浪費的計算,並讓使用者快速調整及重新執行查詢,查詢會提早失敗。
  • 錯誤訊息會通知使用者查詢失敗,因為查詢嘗試存取封存的檔案。

用戶可以產生必須使用 SHOW ARCHIVED FILES 語法還原的檔案報告。 請參閱 顯示封存盤案

重要

如果您收到錯誤 Not enough files to satisfy LIMIT,則數據表在未封存的檔案中沒有足夠的數據列,以滿足 LIMIT所指定的記錄數目。 LIMIT降低 子句,以尋找足夠的未架構資料列,以符合指定的 LIMIT

啟用封存支援

您可以手動指定基礎雲端生命週期管理原則中設定的封存間隔,以在 Azure Databricks for Delta 數據表中啟用封存支援,如下列範例語法所示:

ALTER TABLE <table_name> SET TBLPROPERTIES(delta.timeUntilArchived = 'X days');

啟用封存支援可有效地告訴 Azure Databricks 忽略比指定期間還舊的檔案。 如果您啟用此設定而不設定雲端物件記憶體的生命周期原則,Azure Databricks 仍會根據這個指定的閾值忽略檔案,但不會封存任何數據。

Delta Lake 不會直接與雲端帳戶中設定的生命週期管理原則互動。 如果您在雲端帳戶中更新原則,則必須在 Delta 數據表上更新原則。 請參閱 變更生命週期管理轉換規則

重要

封存支援完全依賴相容的 Azure Databricks 計算環境,而且僅適用於 Delta 資料表。 設定封存支援不會變更 OSS Delta Lake 用戶端或 Databricks Runtime 12.2 LTS 和以下的行為、相容性或支援。

顯示封存盤案

若要識別必須還原以完成指定查詢的檔案,請使用 SHOW ARCHIVED FILES,如下列範例所示:

SHOW ARCHIVED FILES FOR table_name [ WHERE predicate ];

此作業會將封存盤案的 URI 傳回為 Spark DataFrame。 根據物件儲存提供者的文件指示,還原必要的封存檔案。 如需 Azure Databricks 如何檢查已還原數據的資訊,請參閱 Azure Databricks 如何針對已還原的數據範例?

注意

在此作業期間,Delta Lake 只能存取事務歷史記錄中包含的數據統計數據。 根據預設,以下是在數據表的前 32 個資料行上收集的下列統計資料:

  • 最小值
  • 最大值
  • Null 計數
  • 記錄總數

傳回的檔案包含所有必須讀取的封存盤案,以判斷符合述詞的記錄是否存在於檔案中。 Databricks 建議提供述詞,其中包含數據分割、z 排序或叢集的欄位,以減少必須還原的檔案數目。

更新或刪除封存的數據

如果您執行 MERGE會影響封存盤案中數據的、 UPDATEDELETE 作業,作業就會失敗。 您必須將數據還原到支援快速擷取的儲存層,才能執行這些作業。 使用 SHOW ARCHIVED FILES 來判斷您必須還原的檔案。

還原數據的 Azure Databricks 範例如何?

當 Azure Databricks 針對已啟用封存支援的數據表準備掃描時,它會取樣比查詢所需的指定保留期間還舊的檔案,以判斷是否已還原檔案。

如果結果指出假設已封存的取樣檔案已還原,Azure Databricks 會假設已還原查詢的所有檔案,以及查詢程式。

限制

存在下列限制:

  • 生命週期管理原則不支援不以檔案建立時間為基礎的原則。 這包括存取時間型原則和標籤原則。
  • 您無法在具有存檔檔案的資料表上使用 DROP COLUMN
  • REORG TABLE APPLY PURGE 盡最大努力嘗試,但只適用於刪除向量檔案和未封存的參考數據檔。 PURGE 無法刪除封存的刪除向量檔案。
  • 擴充生命週期管理轉換規則會導致非預期的行為。 請參閱 延伸生命週期管理轉換規則

變更生命週期管理轉換規則

如果您變更雲端生命週期管理轉換規則的時間間隔,則必須更新 屬性 delta.timeUntilArchived

如果縮短封存之前的時間間隔(檔案建立后的時間較少),在更新數據表屬性之後,Delta 數據表的封存支援會繼續正常運作。

擴充生命週期管理轉換規則

如果擴充封存之前的時間間隔(若要在觸發封存之前新增更多時間),將屬性 delta.timeUntilArchived 更新為新值可能會導致錯誤。 當數據保留原則變更時,雲端提供者不會自動從封存記憶體還原檔案。 這表示先前符合封存資格的檔案,但現在未被視為符合封存資格的檔案仍會封存。

重要

若要避免錯誤,請勿將 屬性 delta.timeUntilArchived 設定為大於最近封存數據實際存留期的值。

請考慮將封存時間間隔從 60 天變更為 90 天的案例:

  1. 原則變更時,會封存 60 到 90 天之間的所有記錄。
  2. 在 30 天內,不會封存任何新檔案(在擴充原則時,最舊的非封存盤案為 60 天)。
  3. 30 天后,生命周期原則會正確描述所有封存的數據。

delta.timeUntilArchived 設定會根據 Delta 交易日志記錄的檔案建立時間,追蹤設定的時間間隔。 它沒有對基礎原則的明確知識。 在舊封存臨界值和新封存閾值之間的延遲期間,您可以採取下列其中一種方法來避免查詢封存盤案:

  1. 您可以將設定 delta.timeUntilArchived 保留為舊的臨界值,直到所有檔案都經過足夠的時間才能封存。
    • 在上述範例之後,每天前 30 天,Azure Databricks 會將另一天的數據視為封存,但仍需要由雲端提供者封存。 這不會產生錯誤,但會忽略一些可能查詢的數據檔。
    • 30 天後,將 delta.timeUntilArchived 更新為 90 days
  2. 您可以每天更新設定 delta.timeUntilArchived,以反映延遲期間目前的間隔。
    • 雖然雲端原則設定為90天,但封存數據的實際存留期會實時變更。 例如,在 7 天后,將設定 delta.timeUntilArchived67 days 精確反映所有封存數據檔的存留期。
    • 只有在您必須存取經常性存取層中的所有數據時,才需要此方法。

注意

更新的值 delta.timeUntilArchived 並不會變更要封存的數據。 它只會變更 Azure Databricks 將它視為封存的數據。