Share via


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

重要

この機能は、Databricks Runtime 13.3 LTS 以降のパブリック プレビュー段階にあります。

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

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

重要

Azure Databricks は、Azure Archive のアーカイブ サポートのみを備えています。 「ライフサイクル管理によるコストの最適化に関する Azure ドキュメント」を参照してください。

アーカイブされたデータ用に最適化されたクエリ

Azure 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 構文を使用して、復元する必要があるファイルのレポートを生成できます。 「アーカイブされたファイルを表示する」を参照してください。

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

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

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

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 として返します。

Note

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

制限事項

次の制限があります。

  • ファイル作成時間に基づいていないライフサイクル管理ポリシーはサポートされていません。 これには、アクセス時間ベースのポリシーとタグベースのポリシーが含まれます。
  • アーカイブされたファイルを含むテーブルでは 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 日間は毎日、別の 1 日分のデータが Azure Databricks によってアーカイブされたとみなされますが、クラウド プロバイダーによってはまだアーカイブされていません。 これはエラーにはなりませんが、クエリ可能な一部のデータ ファイルは無視されます。
    • 30 日後、delta.timeUntilArchived90 days に更新します。
  2. ラグ期間中の現在の間隔を反映するために、設定 delta.timeUntilArchived を毎日更新できます。
    • クラウド ポリシーは 90 日に設定されていますが、アーカイブ データの実際の保存期間はリアルタイムで変化します。 たとえば、7 日後に delta.timeUntilArchived67 days に設定すると、アーカイブ内のすべてのデータ ファイルの経過時間が正確に反映されます。
    • このアプローチは、ホット層内のすべてのデータにアクセスする必要がある場合にのみ必要です。

Note

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