OCI Object Storage(オラクル・クラウド・インフラのファイル保存サービス)を使った Apache Iceberg(大規模データ管理フォーマット)テーブルを、AIDP ノートブックから読み書きできます。 次のような場合に使用: ユーザーが Iceberg、Apache Iceberg、タイムトラベル(過去のデータ状態を参照)、スナップショット(データの特定時点での状態保存)、スキーマ進化(表の構造変更)、パーティション進化(データ分割方法の変更)、またはデータレイク(大規模なファイルデータ群)上での ACID トランザクション(データ処理の一貫性保証)について言及している場合。 Iceberg Hadoop カタログを `oci://` で使用し、認証はワークスペースの IAM(企業向けの権限管理システム)から自動的に行われます。
Read and write Apache Iceberg tables backed by OCI Object Storage from an AIDP notebook. Use when the user mentions Iceberg, Apache Iceberg, time travel, snapshots, schema evolution, partition evolution, or wants ACID transactions on data lake files. Uses the Iceberg Hadoop catalog on `oci://` — auth is implicit via the workspace IAM identity.
aidp-iceberg — OCI Object Storage 上の Apache IcebergOCI Object Storage をウェアハウスとして、Iceberg テーブル(ACID、タイムトラベル、スキーマ進化、パーティションプルーニング)を管理します。 Iceberg の Hadoop カタログは、データと同じバケットにすべてのメタデータを格納するため、外部メタストアは不要です。
oci:// 上のプレーンな CSV / Parquet / JSON ファイル(トランザクション / タイムトラベル不要)→ aidp-object-storage を使用してくださいOCI_NAMESPACE = "<namespace>"
BUCKET_NAME = "<bucket>"
WAREHOUSE = f"oci://{BUCKET_NAME}@{OCI_NAMESPACE}/iceberg-warehouse"
CATALOG_NAME = "oci_catalog"
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}.type", "hadoop")
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", WAREHOUSE)
この設定以降、oci_catalog.<db>.<table> を参照するすべての SQL が Iceberg によって管理されます。
DB = "demo_db"
TABLE = "employees"
FQN = f"{CATALOG_NAME}.{DB}.{TABLE}"
spark.sql(f"CREATE DATABASE IF NOT EXISTS {CATALOG_NAME}.{DB}")
spark.sql(f"""
CREATE TABLE {FQN} (
employee_id INT,
employee_name STRING,
salary DOUBLE,
department STRING,
hire_date DATE
)
USING iceberg
PARTITIONED BY (department)
""")
import pandas as pd
from datetime import date
pdf = pd.DataFrame([
(101, "John Doe", 75000.0, "Engineering", date(2022, 1, 15)),
(102, "Jane Smith", 85000.0, "Sales", date(2021, 3, 20)),
], columns=["employee_id", "employee_name", "salary", "department", "hire_date"])
spark.createDataFrame(pdf).writeTo(FQN).append()
spark.sql(f"ALTER TABLE {FQN} ADD COLUMN location STRING")
# 既存行の新カラムは NULL となり、エラーは発生しません
snaps = spark.sql(f"""
SELECT snapshot_id, committed_at, operation
FROM {FQN}.snapshots
ORDER BY committed_at
""").collect()
first = snaps[0].snapshot_id
spark.sql(f"SELECT * FROM {FQN} VERSION AS OF {first}").show()
spark.sql(f"""
SELECT file_path, file_format, record_count, file_size_in_bytes
FROM {FQN}.files
""").show(truncate=False)
aidp-object-storage と同様です。ワークスペースの IAM ID が Object Storage への読み書きを行います。キーの設定は不要です。<warehouse>/<db>/<table>/metadata/ 以下に配置されます。Hive メタストア、Glue、JDBC カタログは不要です。USING iceberg が必須です。 指定しない場合、Spark はデフォルトの V1 ファイルソースを使用するため、ACID が無効になります。history.expire.max-snapshot-age-ms)に基づいてスナップショットを期限切れにするため、長期的なタイムトラベルが必要な場合はこの値を適切に設定してください。department)を使った絞り込み条件があるクエリで有効になります。条件がない場合、Iceberg はすべてのファイルを読み込みますが、並列で処理されます。aidp-iceberg — Apache Iceberg on OCI Object StorageManage Iceberg tables (ACID, time travel, schema evolution, partition pruning) backed by OCI Object Storage as the warehouse. The Iceberg Hadoop catalog stores all metadata in the same bucket as data — no external metastore.
oci:// (no transactions / time-travel) → aidp-object-storage.OCI_NAMESPACE = "<namespace>"
BUCKET_NAME = "<bucket>"
WAREHOUSE = f"oci://{BUCKET_NAME}@{OCI_NAMESPACE}/iceberg-warehouse"
CATALOG_NAME = "oci_catalog"
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}.type", "hadoop")
spark.conf.set(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", WAREHOUSE)
After this, all SQL referring to oci_catalog.<db>.<table> is Iceberg-managed.
DB = "demo_db"
TABLE = "employees"
FQN = f"{CATALOG_NAME}.{DB}.{TABLE}"
spark.sql(f"CREATE DATABASE IF NOT EXISTS {CATALOG_NAME}.{DB}")
spark.sql(f"""
CREATE TABLE {FQN} (
employee_id INT,
employee_name STRING,
salary DOUBLE,
department STRING,
hire_date DATE
)
USING iceberg
PARTITIONED BY (department)
""")
import pandas as pd
from datetime import date
pdf = pd.DataFrame([
(101, "John Doe", 75000.0, "Engineering", date(2022, 1, 15)),
(102, "Jane Smith", 85000.0, "Sales", date(2021, 3, 20)),
], columns=["employee_id", "employee_name", "salary", "department", "hire_date"])
spark.createDataFrame(pdf).writeTo(FQN).append()
spark.sql(f"ALTER TABLE {FQN} ADD COLUMN location STRING")
# Old rows show NULL for the new column; no errors.
snaps = spark.sql(f"""
SELECT snapshot_id, committed_at, operation
FROM {FQN}.snapshots
ORDER BY committed_at
""").collect()
first = snaps[0].snapshot_id
spark.sql(f"SELECT * FROM {FQN} VERSION AS OF {first}").show()
spark.sql(f"""
SELECT file_path, file_format, record_count, file_size_in_bytes
FROM {FQN}.files
""").show(truncate=False)
aidp-object-storage. The workspace IAM identity reads/writes Object Storage. No keys.<warehouse>/<db>/<table>/metadata/. There is no Hive metastore, no Glue, no JDBC catalog.USING iceberg is required in CREATE TABLE; otherwise Spark uses the default V1 file source and you lose ACID.history.expire.max-snapshot-age-ms); set this if long-term time travel matters.department in the example). Without that predicate Iceberg still reads all files but in parallel.原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。