Databricks でのアーカイブサポート

プレビュー

この機能は、Databricks Runtime 13.3 LTS 以降でパブリック プレビューされています。

Databricks のアーカイブ サポートでは、Delta テーブルを含むクラウド オブジェクト ストレージでクラウドベースのライフサイクル ポリシーを使用できるようにする機能のコレクションが導入されています。

アーカイブ サポートがないと、データ ファイルまたはトランザクション ログ ファイルがアーカイブされた場所に移動し、クエリー時に使用できないため、Delta テーブルに対する操作が中断される可能性があります。 アーカイブのサポートでは、可能な場合はアーカイブされたデータのクエリを回避するための最適化が導入され、クエリを完了するためにアーカイブから復元する必要があるファイルを識別するための新しい構文が追加されます。

重要

Databricks は、S3 Glacier Deep Archive と Glacier Flexible Retrieve のアーカイブサポートのみを備えています。 アーカイブされたオブジェクトの操作に関する AWS ドキュメントを参照してください。

クエリー アーカイブ・データ 用に最適化

Databricks でのアーカイブのサポートにより、Delta テーブルに対して次のクエリーが最適化されます。

クエリー

新しい動作

SELECT * FROM <table_name> LIMIT <limit> [WHERE <partition_predicate>]

アーカイブされたファイルを自動的に無視し、アーカイブされていないストレージ階層のデータから結果を返します。

Delta Lake メンテナンスコマンド: OPTIMIZEZORDERANALYZEPURGE

アーカイブされたファイルを自動的に無視し、テーブルの残りの部分でメンテナンスを実行します。

データを上書きしたりデータを削除したりする DDL および DML ステートメント: REPLACE TABLEINSERT OVERWRITETRUNCATE TABLEDROP TABLE

ターゲット・アーカイブ・データ・ファイルのトランザクション・ログ・エントリを削除済みとしてマークします。

FSCK REPAIR TABLE

アーカイブされたファイルを無視し、ライフサイクルポリシーに達していないファイルのみをチェックします。

制限事項を参照してください。

早期障害とエラーメッセージ

アーカイブされたファイルをスキャンして正しい結果を生成する必要があるクエリーの場合、Delta Lake のアーカイブ サポートを構成すると、次のことが保証されます。

  • クエリーは、アーカイブ内のファイルにアクセスしようとすると早期に失敗するため、コンピュートの無駄が減り、ユーザーはクエリーをすばやく適応して再実行できます。

  • エラー メッセージは、クエリがアーカイブ ファイルにアクセスしようとしたためにクエリが失敗したことをユーザーに通知します。

ユーザーは、 SHOW ARCHIVED FILES 構文を使用して復元する必要があるファイルのレポートを生成できます。 アーカイブされたファイルを表示するを参照してください。

アーカイブサポート を有効にする

Databricks for Delta テーブルでアーカイブ サポートを有効にするには、次の構文例のように、基になるクラウド ライフサイクル管理ポリシーで構成されたアーカイブ間隔を手動で指定します。

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

Delta Lake は、クラウドアカウントで設定されたライフサイクル管理ポリシーと直接対話しません。 クラウド アカウントのポリシーを更新する場合は、Delta テーブルのポリシーを更新する必要があります。 ライフサイクル管理移行ルールの変更を参照してください。

重要

アーカイブ サポートは互換性のあるDatabricksコンピュート環境に完全に依存しており、 Deltaテーブルでのみ機能します。 アーカイブ サポートを構成しても、OSS Delta Lake クライアントまたは Databricks Runtime 12.2 LTS 以下の動作、互換性、またはサポートは変更されません。

アーカイブされたファイル を表示する

特定のクエリーを完了するために復元する必要があるファイルを特定するには、次の例のように SHOW ARCHIVED FILESを使用します。

SHOW ARCHIVED FILES FOR table_name [ WHERE predicate ];

この操作では、アーカイブされたファイルの URI を Spark DataFrameとして返します。

Delta Lake は、この操作中にトランザクション ログに含まれるデータ統計 (最小値、最大値、null カウント、および最初の 32 列のレコードの合計数) にのみアクセスできます。 戻されるファイルには、述部を満たすレコードがファイル内に存在するかどうかを判別するために読み取る必要があるすべてのアーカイブ・ファイルが含まれます。 Databricks では、復元する必要があるファイルの数を減らすために、可能であれば、データがパーティション分割、Z-ordered、またはクラスター化されているフィールドを含む述語を提供することをお勧めします。

制限

次の制限があります。

  • ファイルの作成時刻に基づかないライフサイクル管理ポリシーはサポートされていません。 これには、アクセス時間ベースのポリシーとタグベースのポリシーが含まれます。

  • アーカイブされたファイルを含むテーブルで 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 日間は毎日、別の日分のデータは Databricks によってアーカイブされたと見なされますが、クラウド プロバイダーによってはまだアーカイブされていません。 これはエラーにはなりませんが、クエリーになる可能性のある一部のデータファイルを無視します。

    • 30 日後、 delta.timeUntilArchived90 daysに更新します。

  2. 設定 delta.timeUntilArchived を毎日更新して、ラグ期間中の現在の間隔を反映できます。

    • クラウド ポリシーは 90 日に設定されていますが、アーカイブされたデータの実際の保存期間はリアルタイムで変化します。 たとえば、7 日後、 delta.timeUntilArchived67 days に設定すると、アーカイブ内のすべてのデータ ファイルの経過時間が正確に反映されます。

    • この方法は、ホット層のすべてのデータにアクセスする必要がある場合にのみ必要です。

delta.timeUntilArchived の値を更新しても、アーカイブされるデータは実際には変更されません。Databricks がアーカイブされたかのように扱うデータのみが変更されます。