メインコンテンツまでスキップ

Databricks の Apache Iceberg とは?

Apache Iceberg は、アナリティクスワークロード向けのオープンソースのテーブルフォーマットです。スキーマ進化、タイムトラベル、隠されたパーティショニングなどの機能に対応しています。Delta Lake と同様に、Iceberg はオブジェクトストレージ内のデータで ACIDトランザクションを可能にする抽象化レイヤーを構築します。

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

Icebergカタログは、テーブルをロードする際に現在のメタデータを返すIcebergテーブルアーキテクチャのトップレベル層です。Icebergカタログは、テーブルの作成、削除、名前変更などの操作を処理します。

Databricks は、によって管理されている Iceberg テーブルをサポートしています:

  • Unity Catalog
  • フォーリンカタログ ( AWS Glue 、 Hive metastore 、 Snowflake Horizon Catalog など)

要件

以下の要件を満たす必要があります:

  • Unity Catalog が有効になっているワークスペース。
  • マネージドIcebergテーブルとフォーリンIcebergテーブルの両方で、Databricks Runtime 16.4 LTS 以降をご利用ください。

Unity Catalog で Iceberg テーブルを作成する

Unity Catalog で作成する Iceberg テーブルは、マネージド Iceberg テーブル です。これらのテーブルを作成するには、以下を使用します:

マネージド Iceberg テーブルは、Databricks プラットフォーム機能と完全に連携しています。

  • Unity Catalog は、これらのテーブルに対して、スナップショットの有効期限切れやファイル圧縮といったライフサイクルタスクを管理します。
  • Managed Iceberg テーブルも、リキッドクラスタリングをサポートしており、これによりクエリのパフォーマンスが向上します。
  • 予測的最適化により、操作が自動化され、ストレージコストの削減とクエリ速度の向上が実現します。
  • マネージド Iceberg テーブルは、マテリアライズドビューストリーミングテーブルもサポートしています。

Databricks では、Unity Catalog への読み書きに Iceberg クライアント 1.9.2 以降を使用することをお勧めします。

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

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

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

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

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

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

警告

デフォルトストレージを使用するワークスペースでは、認証情報の販売はサポートされていません。制限事項を参照してください。

パーティションの進化

パーティション進化機能を使用すると、既存のApache Icebergテーブルのパーティション構成を、データを書き換えることなく変更できます。新しいデータは更新されたパーティションレイアウトで書き込まれ、既存のデータは元のパーティションレイアウトを保持します。Apache Icebergはパーティションの仕様を追跡し、クエリ実行時に適切なフィルタを適用します。Apache Iceberg のパーティションの進化については、こちらをご覧ください。

注記

パーティションエボリューションは、Iceberg REST Catalog を使用する外部 Iceberg エンジンを介してマネージド Iceberg テーブルでサポートされていますが、Databricks SQL ではサポートされていません。years()bucket()のような式ベースのパーティション変換は、マネージドIceberg テーブルではサポートされていません。制限事項を参照してください。

外部アクセスを設定するには、 「Apache IcebergクライアントからDatabricksテーブルにアクセスする」を参照してください。

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

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

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

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

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

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

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

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

中間の再パーティションを行わずに、あるパーティション フィールドを別のパーティション フィールドに交換するには、次のようにします。

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

制限事項

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

  • Iceberg テーブルは、Apache Parquet ファイル形式のみをサポートします。

  • Iceberg v2 では、位置削除および等価削除はサポートされていません。その代わり、Databricks では、行レベルの削除に Iceberg v3 の削除ベクトルをサポートしています。

  • 分岐とタグ付けはサポートされていません。フォーリンIceberg テーブルを読み取るときには、メインブランチのみにアクセスできます。

  • パーティション 分割:

    • パーティションの進化は、外部の Iceberg エンジンから対話する場合にのみ、マネージド Iceberg テーブルでサポートされます。
    • 外部の Iceberg テーブルは、パーティションの進化をサポートしていません。
    • BINARYタイプによるパーティション分割はサポートされていません。
  • ビューは外部のIcebergエンジンからアクセスできません。

  • 次のデータ型はサポートされていません。

    • UUID
    • Fixed(L)
    • TIME
    • 必須フィールドを含むネストされたSTRUCT
  • Iceberg v3 に固有の制限事項については、「制限事項」を参照してください。

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

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

  • AI検索はサポートされていません。「Databricks AI検索」を参照してください。

  • マネージドIcebergテーブルは、テーブルのメンテナンスで予測的最適化が有効になっている場合にのみ作成できます。

  • 次のテーブル プロパティは Unity Catalog によって管理されており、手動で設定することはできません。

    • 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 で生成された列Databricks の制約、およびDelta Lake の照合順序のサポートが含まれます。

フォーリンIceberg テーブルの制限

次の制限は、特にフォーリンIceberg テーブルに適用されます。

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