はじめに
Oracle Data Transformsのドキュメントに、Apache Iceberg接続に関するページがあります。
Apache Icebergは、大規模な分析データセットを管理するためのオープンなテーブルフォーマットです。Oracle Data Transformsでは、Apache Icebergをターゲットとして使い、SQLベースのデータソースからデータをロードできるようになっています。
この記事では、公式ドキュメントをベースに、Oracle Data TransformsからApache Icebergに対して現時点で何ができるのかを整理します。
なお、本記事は実機検証ログではありません。
公式ドキュメントを読んで、機能の位置づけや使いどころを整理する記事です。
この記事の立ち位置
この記事で伝えたいことは、次の一文です。
Oracle Data Transformsは、Apache Icebergを「SQLベースのデータソースからデータをロードするターゲット」として扱えるようになっており、さらにロード後のCompaction、Clustering、統計情報収集までWorkflowに組み込める。
Oracle Data Transformsとは
Oracle Data Transformsは、データロード、データフロー、ワークフローをGUIで設計できるOracleのデータ統合・変換ツールです。公式ドキュメントでは、Data Loads、Data Flows、Workflowsという形でグラフィカルなデータ変換を設計できると説明されています。
ざっくり言うと、Oracleの世界で使えるGUIベースのETL/ELTツールです。
Data Transformsでは、次のような単位で処理を組み立てます。
| 要素 | 役割 |
|---|---|
| Data Load | ソースからターゲットへデータをロードする |
| Data Flow | データの移動や変換処理を定義する |
| Workflow | Data FlowやData Loadなどの実行順序を定義する |
Data Flowでは、Join、Split、AggregateなどのコンポーネントをDesign Canvas上にドラッグ&ドロップして処理を作成できます。作成したData FlowやWorkflowは即時実行できるほか、スケジュール実行もできます。実行時にはOracle Data Transformsがコードを生成し、ランタイム・エージェントがジョブ実行をオーケストレーションします。
そのため、Data Transformsは「SQLを書かずに何でも自動でやってくれる魔法の箱」というより、接続、ロード、変換、実行順序、スケジュール、ジョブ監視をGUIでまとめて扱うためのデータ統合基盤と見るのがよさそうです。
Apache Iceberg対応の要点
今回のポイントは、Data TransformsからApache Icebergをターゲットとして使えることです。
公式ドキュメントでは、Data TransformsはApache Icebergを、任意のSQLベースのデータソースからデータをロードするターゲットとしてサポートすると説明されています。また、IcebergテーブルのParquetファイル保存先として、Oracle Object StorageのS3互換機能およびAWS S3がサポートされています。
イメージとしては、次のような流れです。
SQL-based Source
例: Oracle Database
|
| Data Load
v
Oracle Data Transforms
|
| Apache Iceberg Connection
v
Iceberg Catalog
- Generic REST Catalog
- Snowflake Open Catalog
- Oracle AI Data Catalog
|
v
Object Storage / S3
- Parquet files
- Iceberg table data
つまり、Data TransformsのApache Iceberg対応は、単なるファイル出力というよりも、SQL系データソースからIcebergテーブルへロードし、その後の運用処理までWorkflow化するための機能と捉えると理解しやすいです。
現時点でできること
公式ドキュメントをベースに、現時点でできることを整理すると以下のようになります。
| できること | 内容 |
|---|---|
| Apache Iceberg接続の作成 | Generic REST Catalog、Snowflake Open Catalog、Oracle AI Data CatalogをCatalog Providerとして選択できる |
| SQLベースソースからのロード | Oracle DatabaseなどのSQLベースのデータソースからIcebergターゲット表へロードできる |
| Object Storage / S3への保存 | IcebergテーブルのParquetファイルをOracle Object StorageのS3互換機能やAWS S3に保存できる |
| ロード方式の選択 | Incremental Merge、Incremental Append、Append、Do Not Loadをテーブルごとに選択できる |
| Workflow化 | Data LoadをWorkflowのステップとして追加し、スケジュール実行できる |
| Clustering / Compaction | IcebergテーブルのParquetファイルをクラスタリング・コンパクションできる |
| 統計情報の収集と公開 | Icebergテーブルの表統計・列統計を収集し、Oracle外部表へ公開できる |
それぞれ見ていきます。
1. Apache Iceberg接続を作成できる
Data Transformsでは、Apache Iceberg用の接続を作成できます。
Catalog Providerとして、以下を選択できます。
| Catalog Provider | 概要 |
|---|---|
| Generic REST Catalog | REST Catalog経由でIcebergに接続する |
| Snowflake Open Catalog | Snowflake Open Catalog、つまりApache Polaris系のCatalogに接続する |
| Oracle AI Data Catalog | Oracle AI Data CatalogをCatalog Providerとして利用する |
Generic REST Catalog
Generic REST Catalogを使う場合、Data TransformsのApache Iceberg Connectorは、既存のREST Catalogを必要とします。ドキュメントでは、このREST CatalogはIceberg Open API Specificationを使ったApache Gravitinoベースの構成として説明されています。また、Data TransformsはApache Gravitino 0.7.0-incubating以下をサポートすると記載されています。
認証方式としては、以下を選べます。
| 認証方式 | 内容 |
|---|---|
| None | 認証なし |
| Simple | ユーザー名・パスワード |
| OAuth | Token URI、Client ID、Client Secretなどを指定 |
Storage Settingsでは、ストレージサービスに接続するためのリージョンやS3互換の認証キーを指定します。Generic REST Catalogでは、Oracle Object StorageのS3互換機能とAWS S3の両方がサポートされています。
Snowflake Open Catalog
Snowflake Open Catalogを使ってApache Iceberg接続を作成することもできます。公式ドキュメントでは、Snowflake Open CatalogはApache Polarisのマネージドサービスとして説明されています。Snowflake Open Catalogを使う場合、OAuthがデフォルトの認証方式になります。
Snowflake Open Catalog接続では、IcebergテーブルのParquetファイル保存先としてAWS S3 storage serviceを使用すると説明されています。
Oracle AI Data Catalog
Oracle AI Data CatalogをCatalog Providerとして使うこともできます。
この場合、Oracle AI Data CatalogのURL、Database User、Passwordを指定して接続を作成します。Storage Settingsでは、リージョンやS3互換の認証キーを指定します。
Oracle AI Data Catalogを使うことで、Data TransformsからOracle AI Data Catalog上のIceberg Catalogへデータを書き込む構成が取れるようになります。
2. SQLベースのソースからIcebergへData Loadできる
Data Transformsでは、OracleなどのSQLベースのソースデータソースから、Apache Icebergターゲット表へData Loadを作成できます。ターゲットとしてApache Icebergを使う場合は、Iceberg接続とNamespaceを指定します。Namespaceは、リレーショナルデータベースにおけるSchemaに近い概念として説明されています。
Data Load作成時の大まかな流れは次のようになります。
1. Data Loadを作成
2. Load Processingを選択
3. Source ConnectionでSQLベースのデータソースを選択
4. Target ConnectionでApache Icebergを選択
5. Iceberg接続とNamespaceを指定
6. ソーススキーマ内のテーブルを選択
7. テーブルごとにロード方式を指定
8. Data Loadを実行
Load Processingでは、Data Transformsの内部バッチとして実行する方式と、OCI GoldenGateへ処理を委譲する方式が用意されています。具体的には、InternalではData Transforms Batchを、DelegateではOCI GoldenGateを選択できます。
3. テーブルごとにロード方式を選べる
Apache Iceberg向けのData Loadでは、ソーススキーマ内のテーブルがData Load Detailページに一覧表示されます。
各テーブルに対して、以下のロード操作を選択できます。
| 操作 | 説明 |
|---|---|
| Incremental Merge | 差分データをマージする |
| Incremental Append | 差分データを追記する |
| Append | データを追記する |
| Do Not Load | そのテーブルをロード対象外にする |
単に「IcebergにParquetファイルを書き出せる」という話ではなく、Data Loadの単位で複数テーブルを扱い、テーブルごとにロード方式を選べます。
そのため、たとえば次のような使い分けが考えられます。
| テーブル種別 | 選択しやすいロード方式 |
|---|---|
| マスタ系テーブル | Incremental Merge |
| 追記型のイベントログ | Incremental Append |
| 一括投入したい履歴データ | Append |
| 今回は対象外にしたいテーブル | Do Not Load |
もちろん、実際にどの方式を使うべきかは、ソース側のキー設計、差分検出方式、更新頻度、下流の参照パターンによります。
4. Data LoadをWorkflow化し、スケジュール実行できる
Data Transformsでは、作成したApache Iceberg向けData LoadをWorkflowのステップとして追加できます。また、Workflowはスケジュール実行できます。
これは、Iceberg連携を考えるうえでかなり大事なポイントです。
「一度だけIcebergにロードできる」ではなく、定期的にSQLソースからIcebergへデータをロードする運用ジョブとして管理できるということです。
たとえば、次のようなWorkflowが考えられます。
Data Load
SQL source -> Apache Iceberg
|
v
Iceberg Clustering and Compaction
|
v
Iceberg Stats
このように、ロード、ファイル最適化、統計情報収集を一連の処理としてつなげられます。
Data Transforms自体も、Data FlowやWorkflowを即時実行またはスケジュール実行できるツールとして説明されています。
5. ParquetファイルのClustering / Compactionができる
Apache Icebergでは、テーブルの変更や追加が新しいParquetファイルとして保存されます。小さいファイルが増えると、メタデータ量が増え、ストレージ効率やクエリ性能に影響する可能性があります。
Data Transformsでは、Iceberg Clustering and CompactionをWorkflow Editorのステップとして追加できます。
公式ドキュメントでは、CompactionはParquetファイルを約1GBのファイルにまとめることでストレージ効率を改善し、Clusteringは類似データをソート・グルーピングすることでクエリ性能改善に役立つと説明されています。
対応しているアクションは以下です。
| アクション | 内容 |
|---|---|
| CLUSTERING | テーブル全体を指定したClustering Columnに基づいてソート・クラスタリングする |
| COMPACTION | テーブル全体を約1GBのファイルにコンパクションする |
| CLUSTERING and COMPACTION | クラスタリングとコンパクションを実行する |
| INCREMENTAL CLUSTERING | 新規データに対してクラスタリングする |
| INCREMENTAL COMPACTION | 新規データに対してコンパクションする |
| INCREMENTAL COMPACTION AND CLUSTERING | 新規データに対してコンパクションとクラスタリングを実行する |
ここは特に重要なポイントです。Icebergに書き込めるだけなら「データの出口が増えた」という話ですが、Clustering / CompactionまでWorkflowに組み込めるとなると、Icebergテーブルの運用保守に近い部分までData Transformsで扱えることになります。
6. Iceberg Table Statisticsを収集し、Oracle外部表へPublishできる
Data Transformsでは、Icebergテーブルの表統計・列統計を収集し、対応するOracle外部表へ公開できます。Workflow EditorにはIceberg Statsステップが用意されており、独立したWorkflowノードとして使うことも、Apache Iceberg Data Loadの後続ステップとして使うこともできます。
この機能の目的は、Icebergテーブルを参照するクエリの最適化です。
Oracle Data Transformsのリリースノートでも、Iceberg tables may be populated through multiple enginesとしたうえで、Data TransformsがIcebergテーブルの統計情報を収集・公開できるようになり、クエリオプティマイザがより良い実行計画を判断できるようにするための機能として説明されています。
ただし、この機能を使うには注意点があります。
Icebergの統計情報を収集するには、Icebergを指すOracle外部表を事前に作成しておく必要があります。また、現時点ではstatsは単一データベースに対して実行できると説明されています。
7. ジョブ監視やData Entitiesでの確認もできる
Apache Iceberg Data Loadの実行後は、Data Load StatusパネルやJob Detailsページで実行状況を確認できます。また、ロード済みのテーブルはData Entitiesページに表示され、Data EntityのStatisticsタブから統計情報を確認できます。
Data Transformsの強みは、単に処理を定義するだけでなく、GUI上で実行、監視、管理までひと通り扱える点です。
Iceberg向けのData Loadでも、このData Transformsらしい運用導線に乗せられるのは便利そうです。
できることをアーキテクチャ視点で見る
Data TransformsのApache Iceberg対応を構成要素で見ると、次のようになります。
| レイヤー | 担当するもの |
|---|---|
| Source | Oracle DatabaseなどのSQLベースデータソース |
| Orchestration | Oracle Data TransformsのData Load / Workflow |
| Catalog | Generic REST Catalog、Snowflake Open Catalog、Oracle AI Data Catalog |
| Storage | Oracle Object Storage S3互換、AWS S3 |
| Table Format | Apache Iceberg |
| File Format | Parquet |
| Optimization | Clustering、Compaction、Stats |
この構成を見ると、Data TransformsはIcebergそのものを置き換えるものではありません。
Data Transformsの役割は、SQLベースのデータソースからIcebergテーブルへデータを流し込み、その後の運用処理をWorkflowとしてまとめることです。
どんなユースケースに向いていそうか
今回の機能は、次のようなユースケースに向いていそうです。
| ユースケース | 内容 |
|---|---|
| Oracle DatabaseからIcebergへの連携 | OracleなどのSQLベースのデータをIcebergテーブルへロードする |
| Lakehouse向けのデータ供給 | 分析用データをIceberg形式でObject Storage / S3に配置する |
| 定期バッチ | Data LoadをWorkflow化し、スケジュール実行する |
| ロード後の最適化 | CompactionやClusteringを後続ステップとして実行する |
| Oracle外部表との連携 | Iceberg統計情報をOracle外部表へPublishする |
特に、Oracle中心のデータ基盤を持っていて、分析用データをIcebergへ出していきたい場合には、Data Transformsが入口になりそうです。
注意点
ここまで「できること」を見てきましたが、いくつか注意点もあります。
Iceberg接続はターゲット用途
繰り返しになりますが、Apache Iceberg接続はData Loadのターゲットとして使うものです。公式ドキュメントにも、Apache Iceberg connectionはdata loadsのtargetとしてのみ使用すると記載されています。
つまり、この記事で扱っているのは、主に以下の方向です。
SQL-based Source -> Data Transforms -> Apache Iceberg
現時点のドキュメント範囲では、以下のような使い方を期待しすぎないほうがよさそうです。
Apache Iceberg -> Data Transforms -> 任意のターゲット
SQLベースのソースが前提
Apache Iceberg Data Loadでは、任意のSQLベースのソースデータソースからApache Icebergターゲット表へロードできると説明されています。
そのため、「任意のファイル」「任意のAPI」「任意のイベントストリーム」からIcebergへ直接ロードできる、という話ではありません。
もちろんData Transforms全体としてはさまざまな接続タイプを持っていますが、このApache Iceberg Data Loadの説明としては、SQLベースのソースからIcebergターゲットへロードする機能として理解するのが安全です。
Catalog Providerごとに構成が違う
Generic REST Catalog、Snowflake Open Catalog、Oracle AI Data Catalogでは、必要なURL、認証方式、ストレージ設定が異なります。
特にSnowflake Open Catalogでは、Apache IcebergテーブルのParquetファイル保存先としてAWS S3 storage serviceを使うと説明されています。
そのため、実際に設計する場合は、以下を事前に整理する必要があります。
| 確認ポイント | 例 |
|---|---|
| Catalog Provider | Generic REST / Snowflake Open Catalog / Oracle AI Data Catalog |
| 認証方式 | None / Simple / OAuth / Database User |
| ストレージ | Oracle Object Storage S3互換 / AWS S3 |
| Namespace設計 | Iceberg上のNamespaceをどう切るか |
| 権限 | Catalog、Storage、Source DBへのアクセス権 |
| ネットワーク | Data TransformsからCatalogやStorageへ到達できるか |
StatsにはOracle外部表が必要
Iceberg Table StatisticsをOracle外部表へPublishするには、Icebergを指す外部表を事前に作成しておく必要があります。また、現時点ではstatsは単一データベースに対して実行できると説明されています。
そのため、Stats機能は「Icebergにロードしたら自動的に何でも最適化される」というより、Oracle外部表との連携を前提とした追加ステップとして見るのがよさそうです。
まとめ
Oracle Data TransformsのApache Iceberg対応は、単に「Icebergに書き出せるようになった」というだけではありません。
SQLベースのソースからApache Icebergターゲット表へData Loadし、その後のClustering、Compaction、Stats収集までWorkflowに組み込める点が特徴です。
整理すると、現時点では以下のことができます。
| 項目 | できること |
|---|---|
| 接続 | Apache Iceberg接続を作成できる |
| Catalog | Generic REST Catalog、Snowflake Open Catalog、Oracle AI Data Catalogを利用できる |
| Storage | Oracle Object Storage S3互換やAWS S3にParquetファイルを保存できる |
| Load | SQLベースのソースからIcebergターゲット表へロードできる |
| Operation | Incremental Merge、Incremental Append、Appendなどを選べる |
| Workflow | Data Loadや後続処理をWorkflow化してスケジュール実行できる |
| Optimization | Clustering / Compactionを実行できる |
| Statistics | Iceberg統計情報を収集し、Oracle外部表へPublishできる |
一方で、Apache Iceberg接続はData Loadのターゲット用途である点には注意が必要です。
そのため、この機能は次のような位置づけで見るのがよさそうです。
Oracle Data Transformsは、Oracle DatabaseなどのSQLベースのデータをApache Icebergへロードし、ロード後の運用処理までGUIとWorkflowで管理するための選択肢である。
Oracle中心のデータ基盤からLakehouse構成へデータを出していく場合、Data Transformsはかなり現実的な入口になってきていると感じました。