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

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 など)

要件​

Apache Iceberg管理またはフォーリンテーブルを使用するには、以下の要件を満たす必要があります:

  • Unity Catalogを有効にしたワークスペースを使いましょう。
  • Databricks Runtime 16.4 LTS 以降を使用します。

マネージドテーブルの場合、以下の要件も満たす必要があります。

  • Serverless コンピュートが有効になっているワークスペース

Databricks は、Serverless コンピュートを使用して、マネージドテーブルの Iceberg テーブル メタデータを維持します。Serverless コンピュートは、テーブルをサポートするクラウド ストレージ アカウントへのネットワーク接続が必要です。ファイアウォールがストレージ アカウントを保護している場合、Serverless ネットワーク接続を構成して、Serverless コンピュートがそれに到達できるようにします。必要なセットアップは、お使いのクラウドによって異なります。詳細については、「Serverless コンピュートプレーンのネットワーキング」を参照してください。

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

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

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

  • Unity Catalog は、これらのテーブルに対して、スナップショットの有効期限切れやファイル圧縮といったライフサイクルタスクを管理します。
  • リキッドクラスタリングは クエリ性能を向上させます。
  • 予測的最適化により、操作が自動化され、ストレージコストの削減とクエリ速度の向上が実現します。
  • マテリアライズドビューは、ソースデータの変更時にも結果を最新に保つため、増分更新をサポートします。
  • ストリーミングテーブルは 、Databricks SQLを用いたKafkaおよびクラウドオブジェクトストレージからのインクリメンタルデータロードをサポートします。

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 テーブルにアクセスするを参照してください。

注記

外部の Iceberg エンジンは、Unity Catalog で定義された ビュー を読み取ることができません。制限事項を参照してください。

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

警告

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

Iceberg を使用したマネージドテーブルのクローン作成​

DEEP CLONEを使用して、Icebergを使用するマネージドテーブルの完全で独立したコピーを作成できます。ディープクローンでは、テーブルのデータファイルとメタデータが、Unity Catalog内のIcebergを使用する新しいマネージドテーブルにコピーされます。Icebergを使用するマネージドテーブルのクローン作成を参照してください。

外部Icebergリーダーと互換性のあるマテリアライズドビューを作成​

備考

プレビュー

マネージドIcebergマテリアライズドビューはパブリックプレビューです。この機能を有効にするには、Databricksアカウントチームにお問い合わせください。

外部Icebergリーダーと互換性のあるマテリアライズドビューを作成できます。作成するには、CREATE MATERIALIZED VIEW ステートメントで USING ICEBERG を使用します。完全な構文については、CREATE MATERIALIZED VIEW (パイプライン)を参照してください。完全な要件については、ストリーミングテーブルとマテリアライズドビューへの外部データアクセスを有効にするを参照してください。

SQL
CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

マテリアライズドビューを作成したら、REPAIR TABLE を SYNC METADATA で実行します。REPAIR TABLEを参照してください。

SQL
REPAIR TABLE <mv_name> SYNC METADATA;

外部Icebergリーダーはマテリアライズドビューを読み取ることができますが、書き込みはできません。外部Icebergリーダーからマテリアライズドビューを読み取るには、ストリーミングテーブルとマテリアライズドビューへの外部データアクセスを有効にするを参照してください。

パーティションの進化​

パーティション進化機能を使用すると、既存の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 エンジンは ビュー を読み取ることができません。Unity Catalog を使用すると、Iceberg REST Catalog API はテーブルを利用可能にしますが、ビューは利用可能にしません。

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

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

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

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

  • AI 検索は、Iceberg v3 以降を使用するマネージドテーブルでのみサポートされます。Databricks AI Search および Use Apache Iceberg v3 features を参照してください。

  • マネージド Iceberg テーブルをLakebase の同期テーブルのソースとして使用する場合、自動チェンジデータフィードを使用した増分処理はサポートされていません。

  • マネージド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が必要です。