Azure Databricksの Apache Iceberg とは

Apache Iceberg は、分析ワークロード用のオープン ソース テーブル形式です。 スキーマの進化、タイム トラベル、非表示のパーティション分割などの機能がサポートされています。 Delta Lake と同様に、Iceberg は、オブジェクト ストレージ内のデータに対する ACID トランザクションを許可する抽象化レイヤーを作成します。

Azure Databricksでは、Apache Parquet ファイル形式と Iceberg 仕様のバージョン 1、2、3 を使用する Iceberg テーブルがサポートされています。 Iceberg は、テーブルの変更ごとに新しいメタデータ ファイルを書き込むことで、原子性と一貫性を維持します。 Azure Databricksのすべての Iceberg テーブルは、開いている Iceberg テーブル形式の仕様に従います。 Iceberg テーブルの仕様を参照してください。

Iceberg カタログは、テーブルの読み込み時に現在のメタデータを返す Iceberg テーブル アーキテクチャの最上位レイヤーです。 Iceberg カタログは、テーブルの作成、削除、名前変更などの操作を処理します。

Azure Databricksでは、次の方法で管理される Iceberg テーブルがサポートされます。

必要条件

次の要件を満たす必要があります。

  • Unity Catalog が有効になっているワークスペース。
  • マネージド Iceberg テーブルと外部 Iceberg テーブルの両方に Databricks Runtime 16.4 LTS 以上を使用します。

Unity カタログで Iceberg テーブルを作成する

Unity カタログで作成する Iceberg テーブルは、 管理された Iceberg テーブルです。 これらのテーブルは、次を使用して作成できます。

  • Databricks Runtime または Databricks SQL
  • Apache Spark、Flink、Trino、Kafka など、Iceberg REST Catalog API をサポートする外部 Iceberg 互換エンジン。 Apache Iceberg クライアントからの Access Azure Databricks テーブルを参照してください。

管理された Iceberg テーブルは、Azure Databricks プラットフォーム機能と完全に統合されています。

  • Unity カタログは、これらのテーブルのスナップショットの有効期限やファイル圧縮などのライフサイクル タスクを管理します。
  • 管理された Iceberg テーブルでは、クエリのパフォーマンスを向上させる 液体クラスタリングもサポートされています。
  • 予測最適化 により、操作が自動化され、ストレージ コストが削減され、クエリの速度が向上します。
  • 管理された Iceberg テーブルでは、 具体化されたビューストリーミング テーブルもサポートされます。

Databricks では、Iceberg クライアント 1.9.2 以降を使用して Unity カタログの読み取りと書き込みを行うことをお勧めします。

他のカタログによって管理されている Iceberg テーブルの読み取り

外部 Iceberg テーブルは、Unity カタログの外部のカタログによって管理される Iceberg テーブルです。 外部カタログには、テーブルの現在のメタデータが格納されます。 Azure Databricksでは、Lakehouse Federation を使用してメタデータを取得し、オブジェクト ストレージからテーブルを読み取ります。

外部 Iceberg テーブルは、Azure Databricksでは読み取り専用であり、プラットフォームのサポートが制限されています。

外部システムを使用して Iceberg テーブルにアクセスする

Iceberg REST Catalog API を使用して、Unity カタログ内のすべての Iceberg テーブルにアクセスできます。 このオープン API は、さまざまな言語とプラットフォームにわたる外部 Iceberg エンジンからの読み取りと書き込みの操作をサポートします。 Apache Iceberg クライアントからの Access Azure Databricks テーブルを参照してください。

REST カタログは、基になるストレージへのアクセス用に一時的な資格情報を外部エンジンに提供する機能をサポートしています。 詳細については、「外部システム アクセスのための Unity Catalog 資格情報の販売」を参照してください。

Warnung

既定のストレージを使用するワークスペースでは、資格情報の配布はサポートされていません。 制限事項を参照してください。

パーティションの進化

パーティションの進化により、データを書き換えることなく、既存の Apache Iceberg テーブルのパーティション構成を変更できます。 新しいデータは更新されたパーティション レイアウトで書き込まれ、既存のデータは元のパーティション レイアウトを保持します。 Apache Iceberg はパーティション スペックを追跡し、クエリ時に適切なフィルターを適用します。 Apache Iceberg のパーティションの進化を参照してください。

パーティションの進化は、Iceberg REST カタログを使用する外部 Iceberg エンジンを介して管理された Iceberg テーブルでサポートされますが、Databricks SQL ではサポートされません。 years()bucket()などの式ベースのパーティション変換は、マネージド Iceberg テーブルではサポートされていません。 制限事項を参照してください。

外部アクセスを構成するには、Apache Iceberg クライアントからの Access Azure Databricks テーブルを参照してください。

次の例は、Spark SQL と Iceberg 拡張機能でパーティションの進化を使用する方法を示しています。 Apache Iceberg パーティションの進化構文とサポートされている変換については、 Apache Iceberg Spark DDL に関するページを参照してください。

パーティション フィールドを追加する

既存のテーブルに新しいパーティション フィールドを追加するには:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

パーティション フィールドを削除する

テーブルから既存のパーティション フィールドを削除するには:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

パーティション フィールドを置き換える

中間再パーティションを使用せずにパーティション フィールドを別のパーティション フィールドにスワップするには:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

制限

Azure Databricksの Iceberg テーブルには次の制限が適用され、変更される可能性があります。

  • Iceberg テーブルでは、Apache Parquet ファイル形式のみがサポートされます。
  • Iceberg v2 の場合、位置の削除と等値ベースの削除はサポートされていません。 代わりに、Azure Databricksでは、行レベルの削除用に Iceberg v3 削除ベクトルがサポートされます。
  • 分岐とタグ付けはサポートされていません。 外部の Iceberg テーブルを読み取るときにアクセスできるのはメイン ブランチのみです。
  • パーティショニング:
    • パーティションの進化は、外部 Iceberg エンジンから対話する場合にのみ、マネージド Iceberg テーブルでサポートされます。
    • 外部 Iceberg テーブルでは、パーティションの進化はサポートされていません。
    • BINARYの種類によるパーティション分割はサポートされていません。
  • 外部 Iceberg エンジンからビューにアクセスすることはできません。
  • 次のデータ型はサポートされていません。
    • UUID
    • Fixed(L)
    • TIME
    • 必須フィールドを含む入れ子構造のSTRUCT
  • Iceberg v3 に固有の制限事項については、「 制限事項」を参照してください。

マネージド Iceberg テーブルの制限事項

次の制限は、特にマネージド Iceberg テーブルに適用されます。

  • ベクター検索はサポートされていません。 ベクター検索を参照してください。
  • 管理された Iceberg テーブルは、テーブルのメンテナンスに 対して予測最適化 が有効になっている場合にのみ作成できます。
  • 次の表のプロパティは Unity カタログによって管理され、手動で設定することはできません。
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • テーブルの圧縮を変更する圧縮コーデックはサポートされていません。 既定では、すべてのテーブルで Zstd が使用されます。
  • 式 (たとえば、 years()months()days()hours()bucket()) によるパーティション分割はサポートされていません。
  • Apache Iceberg でサポートされていない機能は、管理された Iceberg テーブルでも使用できません。 これには、Delta Lake 生成列Azure Databricks における制約、および Delta Lake の照合サポート が含まれます。

外部 Iceberg テーブルの制限事項

次の制限は、特に外部の Iceberg テーブルに適用されます。

  • タイム トラベルは、以前にAzure Databricksで読み取られた Iceberg スナップショット (つまり、SELECT ステートメントが実行されたスナップショット) でのみサポートされます。
  • Iceberg パーティション分割にバケット変換関数を使用すると、条件付きフィルターを使用するとクエリのパフォーマンスが低下する可能性があります。
  • Amazon S3 などのクラウド ストレージの階層化製品は、外部の Iceberg テーブルと統合されていません。 Azure Databricksの外部 Iceberg テーブルにアクセスすると、低コストのストレージ層でアーカイブされたデータを復元できます。
  • 専用アクセス モード クラスターでは、Iceberg テーブルに対する読み取りと REFRESH FOREIGN TABLE 操作には ALL PRIVILEGESが必要です。