本記事はOracle Cloud Infrastructure Advent Calendar 2025 シリーズ1の8日目の記事です。
7日目は tkote さんの「Object Storage 上の Iceberg テーブルを Autonomous AI Database の外部表にする」でした。
目次
- はじめに
- 外部データソース (Autonomous AI Lakehouse) の準備
- AIDPの作成
- Delta Lakeで利用するObject Storageバケットの準備
- ワークスペースの作成
- メダリオン・アーキテクチャの構築
- Oracle Analytics Cloud (OAC) が参照するためのデータを外部データソースへ保存
- GoldレイヤーのデータをOACで分析
- おわりに
はじめに
2025年10月に開催されたOracle AI World 2025で AI Data Platform というOCIの新サービスが発表されました。
主な特徴は以下になります。
- データレイクの用途に便利なDelta Lakeによるデータ管理機能を提供
- Apache Sparkによる分散処理のコンピュート環境をマネージドで提供
- 生成AIを使ったデータ加工機能を内包
これら機能がすぐ使える状態でサービス提供されており、PySparkによるデータ加工や、メダリオン・アーキテクチャによる段階的なデータ管理をサービス立ち上げ直後から実行可能です。
ちなみにメダリオン・アーキテクチャとは Bronze、Silver、Gold の3レイヤーで以下のように段階的なデータ管理を行うコンセプトです。
- Bronze: 外部データソースから取得した生データ
- Silver: 生データから欠損地や外れ値などを除去して品質を向上させたもの
- Gold: Silverのデータに対して、さらに用途に合わせて追加データを付加したもの
- ex) 既存列の平均値など集計した値、既存データをコンテキストとした生成AIによる出力、など
今回はこうしたDelta Lakeによるメダリオン・アーキテクチャの構築、加工したデータの分析といった作業を試してみました。
なお作業内容はOracle LiveLabsで公開されている以下ハンズオン教材を利用しました。
注意 (利用するOCIリージョンについて)
もしAIDPとOCIの生成AIサービスを組み合わせて利用する場合、生成AIサービスが提供されているリージョンを選択してください。
生成AIサービスが未提供のリージョンでは、OCI生成サービスが提供するLLMの呼び出しが出来ませんでした (何か方法があるのかもしれませんが...)
外部データソース (Autonomous AI Lakehouse) の準備
まずはAIDPに読み込む外部データソースとして Autonomous AI Lakehouse を準備します。
Autonomous AI Lakehouse もOracle AI Worldで発表されたサービスですが、本記事では詳細を割愛いたします。
ご興味ありましたら以下をご参照ください。
Autonomous AI Databaseのページから作成していきます。
DBバージョンは 26ai を選びます。
検証用データを格納するスキーマを作ります。
CREATE USER gold IDENTIFIED BY "strong_password";
-- Data privileges
GRANT CONNECT, RESOURCE TO gold;
-- Allow creation of tables, views, and other objects
GRANT CREATE SESSION TO gold;
GRANT CREATE TABLE TO gold;
GRANT CREATE VIEW TO gold;
GRANT CREATE SEQUENCE TO gold;
GRANT CREATE PROCEDURE TO gold;
GRANT UNLIMITED TABLESPACE TO gold;
-- Enable DBMS_CLOUD
GRANT EXECUTE ON DBMS_CLOUD TO gold;
-- Grant access to data_pump_dir (used for saveAsTable operation in spark)
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO gold;
最後に実行しているディレクトリ・オブジェクトの権限ですが、PySparkを使って加工したDelta Lake上のデータをADBへ保存する際に必要となります。
作成したDBユーザ GOLD のRESTを有効化し、SQL Developer Webが使えるようにします。
GOLD スキーマ上にテーブルを作成し、検証用のデータを追加します。
今回利用する検証用データは各航空会社毎のフライト実績になります。
CREATE TABLE AIRLINE_SAMPLE (
FLIGHT_ID NUMBER,
AIRLINE VARCHAR2(20),
ORIGIN VARCHAR2(3),
DEST VARCHAR2(3),
DEP_DELAY NUMBER,
ARR_DELAY NUMBER,
DISTANCE NUMBER
);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1001, 'Skynet Airways', 'JFK', 'LAX', 10, 5, 2475);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1002, 'Sunwind Lines', 'ORD', 'SFO', -3, -5, 1846);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1003, 'BlueJet', 'ATL', 'SEA', 0, 15, 2182);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1004, 'Quantum Flyers', 'DFW', 'MIA', 5, 20, 1121);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1005, 'Nebula Express', 'BOS', 'DEN', 12, 8, 1754);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1006, 'Skynet Airways', 'SEA', 'ORD', -5, -2, 1721);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1007, 'Sunwind Lines', 'MIA', 'ATL', 7, 4, 595);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1008, 'BlueJet', 'SFO', 'BOS', 22, 18, 2704);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1009, 'Quantum Flyers', 'LAX', 'JFK', -1, 0, 2475);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1010, 'Nebula Express', 'DEN', 'DFW', 14, 20, 641);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1011, 'Skynet Airways', 'PHX', 'SEA', 3, -2, 1107);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1012, 'BlueJet', 'ORD', 'ATL', -7, -10, 606);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1013, 'Quantum Flyers', 'BOS', 'JFK', 9, 11, 187);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1014, 'Sunwind Lines', 'LAX', 'DFW', 13, 15, 1235);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1015, 'Nebula Express', 'SFO', 'SEA', 0, 3, 679);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1016, 'Skynet Airways', 'ATL', 'DEN', 6, 5, 1199);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1017, 'BlueJet', 'DFW', 'PHX', -2, 1, 868);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1018, 'Quantum Flyers', 'ORD', 'BOS', 8, -1, 867);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1019, 'Sunwind Lines', 'JFK', 'MIA', 10, 16, 1090);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1020, 'Nebula Express', 'DEN', 'ORD', -4, 0, 888);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1021, 'Skynet Airways', 'SEA', 'ATL', 16, 12, 2182);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1022, 'BlueJet', 'MIA', 'LAX', 5, 7, 2342);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1023, 'Quantum Flyers', 'DEN', 'BOS', 2, -2, 1754);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1024, 'Sunwind Lines', 'SFO', 'JFK', -6, -8, 2586);
INSERT INTO AIRLINE_SAMPLE (FLIGHT_ID, AIRLINE, ORIGIN, DEST, DEP_DELAY, ARR_DELAY, DISTANCE) VALUES (1025, 'Nebula Express', 'ORD', 'MIA', 11, 13, 1197);
もう一つテーブルを作成します。
こちらには最後にOracle Analytics Cloudから参照する分析用データを格納します。
中身のデータはPySparkで加工したデータを入れるため、一旦テーブルだけ作ります。
CREATE TABLE GOLD.AIRLINE_SAMPLE_GOLD (
FLIGHT_ID NUMBER,
AIRLINE VARCHAR2(20),
ORIGIN VARCHAR2(3),
DEST VARCHAR2(3),
DEP_DELAY NUMBER,
ARR_DELAY NUMBER,
DISTANCE NUMBER,
AVG_DEP_DELAY NUMBER,
AVG_ARR_DELAY NUMBER,
AVG_DISTANCE NUMBER,
REVIEW VARCHAR2(4000),
SENTIMENT VARCHAR2(200)
);
AIDPの作成
AIDPの環境をプロビジョニングします。
メニューから「AIデータ・プラットフォーム」を選択し、「Create AI Data Platform」を選択します。
AI Data Platform名、ワークスペース名を入力します。
アクセス・レベルに「Standard」を選び、要件となっているポリシーが提示された場合は「Add」を押下してポリシーを適用します。
オプションとなっているポリシーも必要に応じて適用します。
本検証では「Enable object deletion」が必要となるため、それだけ適用します。
作成ボタンを押下して数分ほどで利用可能な状態になります。
State が Active になり次第、AIDP名の横にあるリンクを押下します。
AIDPのサービス・コンソールが開いたらカタログ作成へ進みます。
ADB上に作成した GOLD スキーマのデータをカタログに登録し、先ほど作成したデータを読み込めるようにします。
入力フォームへ以下画像の通りに入力します。
Password にはADB上に作成した GOLD スキーマのパスワードを入力します。
作成ボタンを押下してカタログを作ります。
サービス・コンソールのメニューから Master catalog を選択して更新ボタンを押下すると、作成した新しいカタログが表示されます。
Delta Lakeで利用するObject Storageバケットの準備
次にDelta Lakeとして利用するObject Storageバケットを作成します。
作成したバケットに delta という名前のフォルダを作成します。
上記フォルダ内にDeltaテーブルの本体 (Parquetファイル) とメタデータ (jsonファイル) が保存されていきます。
ワークスペースの作成
AIDP上にワークスペースを作成し、PySparkを使ったデータ加工ができるようにします。
サービス・コンソールのメニューから Workspace を選び、右上の Create を押下します。
フォームに入力します。
Default catalog には先ほど作成したカタログ aidp_external_gold_catalog を選び、ADBの GOLD スキーマのデータを読み取れるようにします。
Create を押下してワークスペースを作成します。
作成したワークスペース名を選択し、+ ボタンからフォルダーを追加します。
フォームに入力して Create を押下します。
作成した demo フォルダを選び、+ ボタンから Notebook を作成します。
作成された Notebook 右上のメニューから Create cluster を選び、Spark環境として利用するクラスタ環境を作ります。
クラスタ名だけ入力して後は初期値のまま Create を押下します。
これでPySparkを使ったデータ加工の準備が整いました。
メダリオン・アーキテクチャの構築
外部データソースからの読み込み
Spark環境上でデータ加工していくにあたり、まずは先ほど作成したクラスタをアタッチします。
ここから Notebook 上でPySparkを使って作業していきます。
まずは aidp_external_gold_catalog 経由でADB上のデータを読み込みます。
airlines_sample_table = "aidp_external_gold_catalog.gold.AIRLINE_SAMPLE"
# Confirm AIRLINE_SAMPLE table is reflected in spark
spark.sql("SHOW TABLES IN aidp_external_gold_catalog.gold").show(truncate=False)
df = spark.table(airlines_sample_table)
df.show()
ADBから読み込んだデータをDeltaテーブルとしてObject Storageに書き出します。
delta_path = "oci://oci-bucket@os-namespace/delta/airline_sample"
df.write.format("delta").mode("overwrite").save(delta_path)
Object Storageバケットを確認するとDeltaテーブルのファイルが作成されています。
Bronzeレイヤー
Spark上に新規のカタログを作成し、Bronzeレイヤー用のスキーマを作成します。
そこに先ほどObject Storage上に保存したDeltaテーブルを参照先とする新しいテーブル airline_sample_delta を構築します。
bronze_table = "airlines_data_catalog.bronze.airline_sample_delta"
# Create New Internal Catalog & Schema to store data
spark.sql("CREATE CATALOG IF NOT EXISTS airlines_data_catalog")
spark.sql("CREATE SCHEMA IF NOT EXISTS airlines_data_catalog.bronze")
# Drop the table if it exists, to avoid conflicts
spark.sql(f"DROP TABLE IF EXISTS {bronze_table}")
# Create new bronze table
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {bronze_table}
USING DELTA
LOCATION '{delta_path}'
""")
上記を実行するとカタログ一覧に airlines_data_catalog が追加され、Bronze スキーマも確認できます。
続いてDeltaテーブルのタイムトラベル機能を試すため、Bronzeレイヤーの airline_sample_delta テーブルを加工します。
本来はSilverレイヤーに対して行うクレンジング作業ですが、LiveLabsの手順では上記都合でBronzeレイヤーを対象に行っています。
spark.sql(f"""
DELETE FROM {bronze_table}
WHERE DISTANCE IS NULL OR DISTANCE < 0
""")
という訳でタイムトラベル機能を試してみます。
Deltaテーブルを読み込む際に versionAsOf オプションを使うことで過去の状態のデータを参照できます。
df_v0 = spark.read.format("delta").option("versionAsOf", 0).load(delta_path)
df_v0.show()
Silverレイヤー
先ほどクレンジングしたデータをSilverレイヤーにも改めて保存します。
主な処理の流れは以下の通りです。
-
airlines_data_catalogにSilverレイヤー用のスキーマを作成 - Silverレイヤーの
airline_sample_deltaテーブルに紐づける予定のObject Storageパスに、クレンジングしたデータをDeltaテーブルとして保存 - Object Storage上に保存したDeltaテーブルを参照先とするSilverレイヤー用テーブル
airline_sample_deltaを作成
df_clean = spark.table(bronze_table)
silver_path = "oci://os-bucket@os-namespace/delta/silver/airline_sample"
silver_table = "airlines_data_catalog.silver.airline_sample_delta"
# Create Silver Schema to store data
spark.sql("CREATE SCHEMA IF NOT EXISTS airlines_data_catalog.silver")
# Write cleaned DataFrame to object storage as Delta
df_clean.write.format("delta").mode("overwrite").save(silver_path)
# Remove table registration if it already exists
spark.sql(f"DROP TABLE IF EXISTS {silver_table}")
# Register cleaned data as new Silver table
spark.sql(f"""
CREATE TABLE {silver_table}
USING DELTA
LOCATION '{silver_path}'
""")
# Check table to make sure it's cleaned
spark.sql(f"SELECT * FROM {silver_table}").show()
上記を実行するとカタログ一覧に Silver スキーマが追加されます。
Goldレイヤー
クレンジングしたSilverレイヤーのデータに情報を追加します。
まずは既存の数値データ3種について平均値を追加します。
一旦はPySparkのDataFrame上で加工します。
# Enrich data by adding aggregates/average delays and distance
from pyspark.sql import functions as F
df = spark.table("airlines_data_catalog.silver.airline_sample_delta")
# Calculate averages by airline
avg_df = df.groupBy("AIRLINE").agg(
F.avg("DEP_DELAY").alias("AVG_DEP_DELAY"),
F.avg("ARR_DELAY").alias("AVG_ARR_DELAY"),
F.avg("DISTANCE").alias("AVG_DISTANCE")
)
# Join with the detail table
enhanced_df = df.join(avg_df, on="AIRLINE", how="left")
enhanced_df.show()
既存データに各航空会社のレビュー結果を追加します。
こちらも一旦はPySparkのDataFrame上で加工します。
# Add New Review Column for Sentiment Analysis
import random
sample_reviews = [
"The flight was on time and comfortable.",
"Long delay and unfriendly staff.",
"Quick boarding and smooth flight.",
"Lost my luggage, not happy.",
"Great service and tasty snacks."
]
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
random_review_udf = udf(lambda: random.choice(sample_reviews), StringType())
df_with_review = enhanced_df.withColumn("REVIEW", random_review_udf())
df_with_review.show()
追加したレビューに対して生成AIを使ったセンチメント分析の結果も追加します。
こちらも一旦はPySparkのDataFrame上で加工します。
また今回はLLMとしてOCI生成AIサービスで使える Cohre Commnad R の最新バージョンを使っています。
# test model
spark.sql("select query_model('cohere.command-latest','What is Intelligent Data Lake Service in Oracle?') as questions").show(truncate=False)
# Run Sentiment Analysis Against Review with LLM
from pyspark.sql.functions import expr
enhanced_df = df_with_review.withColumn("SENTIMENT",\
expr("query_model('cohere.command-latest', concat('What is the sentiment for this review: ', review))"))\
#.show(10, False)
enhanced_df.show(10, False)
実行した結果、以下の通り SENTIMENT 列にセンチメント分析の結果が格納されました。
情報を追加したDataFrame内のデータを、GoldレイヤーのDeltaテーブルへ保存します。
処理の流れは以下の通りで、Silverレイヤーと同様です。
-
airlines_data_catalogにGoldレイヤー用のスキーマを作成 - Goldレイヤーの
airline_sample_avgテーブルに紐づける予定のObject Storageパスに、情報を追加したデータをDeltaテーブルとして保存 - Object Storage上に保存したDeltaテーブルを参照先とするGoldレイヤー用テーブル
airline_sample_avgを作成
# Save Averaged Data to Gold Schema
gold_path = "oci://os-bucket@os-namespace/delta/gold/airline_sample_avg"
gold_table = "airlines_data_catalog.gold.airline_sample_avg"
# Create Gold Schema
spark.sql("CREATE SCHEMA IF NOT EXISTS airlines_data_catalog.gold")
enhanced_df.write.format("delta").option("mergeSchema", "true").mode("overwrite").save(gold_path)
spark.sql(f"DROP TABLE IF EXISTS {gold_table}")
spark.sql(f"""
CREATE TABLE {gold_table}
USING DELTA
LOCATION '{gold_path}'
""")
df_gold = spark.table(gold_table)
df_gold.show()
上記を実行するとカタログ一覧に Gold スキーマが追加されます。
Oracle Analytics Cloud (OAC) が参照するためのデータを外部データソースへ保存
OAC用データを外部データソースへ保存するにあたり事前準備を行います。
まずはGoldレイヤーのテーブル airline_sample_avg 向けに利用したDataFrameの全カラム名が、大文字となっているか確認します。
OACに読み込むテーブルのカラム名はすべて大文字である必要があります。
for col_name in df_gold.columns:
df_gold = df_gold.withColumnRenamed(col_name, col_name.upper())
df_gold.show()
次に保存先である外部データソースの Autonomous AI Lakehouse に適したデータ型へキャスト処理を行います。
from pyspark.sql.functions import col
from pyspark.sql.types import DecimalType, StringType
# Cast columns in the DataFrame to the exact types expected by the Oracle table.
# Use DecimalType for NUMBER fields, StringType for VARCHAR2/text.
df_gold_typed = (
df_gold
# Cast numeric columns to DecimalType (matches NUMBER in Oracle)
.withColumn("FLIGHT_ID", col("FLIGHT_ID").cast(DecimalType(38,10)))
.withColumn("DEP_DELAY", col("DEP_DELAY").cast(DecimalType(38,10)))
.withColumn("ARR_DELAY", col("ARR_DELAY").cast(DecimalType(38,10)))
.withColumn("DISTANCE", col("DISTANCE").cast(DecimalType(38,10)))
.withColumn("AVG_DEP_DELAY", col("AVG_DEP_DELAY").cast(DecimalType(38,10)))
.withColumn("AVG_ARR_DELAY", col("AVG_ARR_DELAY").cast(DecimalType(38,10)))
.withColumn("AVG_DISTANCE", col("AVG_DISTANCE").cast(DecimalType(38,10)))
# Cast text columns to StringType (matches VARCHAR2 in Oracle)
.withColumn("AIRLINE", col("AIRLINE").cast(StringType()))
.withColumn("ORIGIN", col("ORIGIN").cast(StringType()))
.withColumn("DEST", col("DEST").cast(StringType()))
.withColumn("REVIEW", col("REVIEW").cast(StringType()))
.withColumn("SENTIMENT", col("SENTIMENT").cast(StringType()))
)
# Specify the desired column order to match the target Oracle table
col_order = [
"FLIGHT_ID", "AIRLINE", "ORIGIN", "DEST", "DEP_DELAY", "ARR_DELAY", "DISTANCE",
"AVG_DEP_DELAY", "AVG_ARR_DELAY", "AVG_DISTANCE", "REVIEW", "SENTIMENT"
]
# Select only these columns, in this order, to create a clean DataFrame for insertion
df_gold_typed = df_gold_typed.select(col_order)
# Print the final DataFrame schema for validation (should match the Oracle table exactly)
print(df_gold_typed.printSchema())
# Register the DataFrame as a temp view for Spark SQL use (for INSERT INTO ... or further queries)
df_gold_typed.createOrReplaceTempView("df_gold")
加工したDataFrame df_gold の値を Autonomous AI Lakehouse へ保存します。
保存先のテーブルは冒頭で Autonomous AI Lakehouse の準備作業をした際に作った空のテーブル AIRLINE_SAMPLE_GOLD になります。
%sql
INSERT into aidp_external_gold_catalog.gold.airline_sample_gold select * from df_gold
GoldレイヤーのデータをOACで分析
Autonomous AI Lakehouseのテーブル AIRLINE_SAMPLE_GOLD をOACのデータソースとして登録し、分析してみます。
まずはOAC用にAutonomous AI Lakehouse詳細画面からウォレットを取得します。
次にOACインスタンスを作成します。
OACのトップ画面から接続の作成へ進みます。
ADW (Autonomous AI Lakehouseの旧称) を選択し、先ほど取得したウォレットをアップロードしつつ接続を作成します。
再度OACのトップ画面へ行き、データセットの作成へ進みます。
作成した接続を選びます。
AIRLINE_SAMPLE_GOLD を空白のエリアにドラッグ&ドロップし、右上の保存ボタンからデータセットを保存します。
データセットを使った分析を行うため、OACトップ画面からワークブックの作成を選択します。
作成したデータセットを選択します。
これで AIRLINE_SAMPLE_GOLD テーブルを通してGoldレイヤーのデータに対する分析を行えます。
例として、以下は航空会社毎の出発遅延時間の平均値に対するグラフとなります。
おわりに
以上がAIDPのApache SparkおよびDelta Lake、生成AI連携機能を使ったデータ加工とメダリオン・アーキテクチャの構築でした。
機械学習や分析用のデータ、あるいは生成AIのコンテキストデータを準備するための環境を、AIDPによって簡単に用意できる点が今回の検証で分かりました。
AIDPであれば分散処理のためのクラスター環境やデータレイク用のファイルシステム、メタデータ管理用のカタログを手組で構築する必要がなくなり、すぐにデータエンジニアリングを始められますね。




























































