Azure Databricksの Apache Iceberg とは

Von Bedeutung

Unity カタログ管理の Iceberg テーブルは、Databricks Runtime 16.4 LTS 以降の パブリック プレビュー で利用できます。 外部 Iceberg テーブルは、Databricks Runtime 16.4 LTS 以降でもパブリック プレビュー段階にあります。

Iceberg v3 の機能は、Databricks Runtime 18.0 以降の パブリック プレビュー で利用できます。 Apache Iceberg v3 機能の使用を参照してください。

Apache Iceberg は、分析ワークロード用のオープン ソース テーブル形式です。 スキーマの進化、タイム トラベル、非表示のパーティション分割などの機能がサポートされています。 Delta Lake と同様に、Iceberg は、オブジェクト ストレージに格納されているデータに対する ACID トランザクションを可能にする抽象化レイヤーを提供します。 Azure Databricksでは、Apache Parquet ファイル形式を使用する Iceberg テーブルがサポートされます。 Iceberg は、テーブルの変更ごとに新しいメタデータ ファイルを書き込むことで、原子性と一貫性を維持します。

Iceberg カタログは、Iceberg テーブル アーキテクチャの最上位レイヤーです。 テーブルの作成、削除、名前変更などの操作を処理します。 主な役割は、テーブルが読み込まれるときに現在のメタデータを提供することです。 Azure Databricksでは、次の方法で管理される Iceberg テーブルがサポートされます。

Azure Databricksのすべての Iceberg テーブルは、開いている Iceberg テーブル形式の仕様に従います。 Iceberg テーブルの仕様を参照してください。

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 テーブルでは、クエリのパフォーマンスを向上させる 液体クラスタリングもサポートされています。 予測最適化 により、これらのタスクが自動化され、ストレージ コストが削減され、クエリの速度が向上します。 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 テーブルではサポートされていません。 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;

Iceberg テーブルの制限事項

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

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

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

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

  • ベクター検索はサポートされていません。
  • Iceberg では、 変更データ フィードはサポートされていません。 そのため、次のソースとしてマネージド Iceberg テーブルを読み取る場合、増分処理はサポートされません。
    • 具体化されたビューとストリーミング テーブル
    • データ プロファイリング
    • オンライン テーブル
    • Lakebase
    • データの分類
  • 管理された 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が必要です。