Apache Iceberg#

Apache Icebergは、オブジェクトストレージ上に構築されるデータレイク向けに設計された、高性能なオープンテーブル形式です。スケーラブルなメタデータ管理、スキーマ進化、そしてACIDトランザクションを提供します。

EDB は Analytics Accelerator 内で Iceberg サポートを有効にし、Postgres が大規模なデータ レイク テーブルを効率的にクエリおよび管理できるようにします。

Hybrid Manager (HM) での実装については、 Working with Apache Iceberg in EDB HM を参照してください。

Apache Icebergとは#

Icebergは、データレイク向けに設計されたテーブル形式です。データファイル(Parquet、ORC、Avro)の整理と追跡方法を定義し、オブジェクトストレージにデータベースのような多くの機能を追加します。

主な目標#

  • 信頼性: 同時操作によるデータの一貫性を確保

  • パフォーマンス: パーティションプルーニングとメタデータの最適化により高速クエリが可能になります

  • スケーラビリティ: ペタバイト規模のテーブルを管理するように設計されています

  • オープン性: 幅広いエコシステムのサポートを備えたApache Software Foundationプロジェクト

関連概念: Generic concepts - open table formats

主な機能と利点#

  • スキーマの進化: テーブルデータを書き換えずに列を安全に追加、削除、または変更できます

  • 隠しパーティショニング: データを透過的にパーティション分割し、効率的なパーティションプルーニングを可能にします

  • タイムトラベルとバージョン管理: 履歴テーブルバージョンのクエリをサポート

  • ACIDトランザクション: 楽観的同時実行性を使用してトランザクションの保証を提供します

  • 複数のファイル形式のサポート: Parquet、ORC、Avroファイルを管理します

  • 効率的なメタデータ管理: メタデータツリー構造を使用して、高速なクエリ計画とデータスキップを実現します。

  • カタログ統合: RESTベースのカタログ(Project Nessie、AWS Glue)、Hive Metastoreなどをサポートします

EDB分析においてApache Icebergが重要な理由#

Iceberg サポートにより、Analytics Accelerator は次のことが可能になります。

  • 運用データと分析データを統合: 従来のPostgresデータと並行してIcebergテーブルをクエリします

  • 費用対効果の高いオブジェクトストレージを活用: 大規模な履歴データセットを効率的に保存

  • パフォーマンスの向上: ベクトル化されたエンジンでIcebergメタデータとパーティションプルーニングを使用する

  • 階層型ストレージをサポート: PGDは階層型テーブル戦略の一環としてIcebergにデータをオフロードできます

  • 相互運用性を実現: Spark、Presto、Trino、Flink、Dremioなどのツールとデータを共有します

関連概念: Analytics Accelerator concepts - EDB Postgres Lakehouse

EDBソリューションがIcebergサポートを実装する方法#

PGAA 拡張#

Lakehouse ノードと PGD ノード内の Postgres Analytical Appliance (PGAA) コンポーネントは、Iceberg メタデータとデータ ファイルを読み取り、操作できます。

カタログ接続#

PGAA は、以下を使用して Iceberg カタログ (Lakekeeper、AWS Glue、REST カタログなど) に接続します。

SELECT pgaa.add_catalog(...);
SELECT pgaa.attach_catalog(...);

これにより、テーブルの検出、スキーマの読み取り、データのクエリが可能になります。

Iceberg テーブルのクエリ ユーザーは、Iceberg テーブルを参照する外部テーブルを Postgres で定義できます。

CREATE TABLE my_table USING PGAA WITH (
  pgaa.format = iceberg,
  pgaa.managed_by = my_catalog,
  pgaa.catalog_namespace = my_db,
  pgaa.catalog_table = my_table
);

定義されると、テーブルは Postgres SQLを使用して完全にクエリ可能になります。

Iceberg テーブルへの書き込み#

PGD は、オブジェクト ストレージ内の Iceberg 形式にデータをオフロードできます。

新しい氷山テーブルを作成できます

既存の氷山テーブルは、

オフロード操作は通常、階層型テーブル戦略に従います。

関連概念: 階層型テーブル

関連トピック#