1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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はかなり現実的な入口になってきていると感じました。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?