Apache Iceberg表の問合せ
Autonomous Databaseは、「Apache Iceberg」表の問合せをサポートします。
- Apache Iceberg表の問合せについて
Autonomous Databaseは、Amazon Web Services (AWS)またはOracle Cloud Infrastructure (OCI)オブジェクト・ストレージに格納されている「Apache Iceberg」表の問合せをサポートします。 - Apache Iceberg表の問合せに関連する概念
次の概念を理解しておくと、「Apache Iceberg」表の問合せに役立ちます。 - 例: Apache Iceberg表の問合せ
これらの例は、データ・カタログを使用して、ルート・マニフェスト・ファイルにダイレクトURLを使用して、Amazon Web Services (AWS)およびOracle Cloud Infrastructure (OCI)で「Apache Iceberg」表を問い合せる方法を示しています。
Apache Iceberg表の問合せについて
Autonomous Databaseは、Amazon Web Services (AWS)またはOracle Cloud Infrastructure (OCI)オブジェクト・ストレージに格納されている「Apache Iceberg」表の問合せをサポートします。
サポートされる構成
- AWS上のIceberg表:
- SparkまたはAthenaで作成されたAWS Glueデータ・カタログに登録されたIceberg表。
詳細は、AWS Glueコネクタを使用して、ACIDトランザクションを含む「Apache Iceberg」表の読取りおよび書込みを行い、タイム・トラベルを実行および「Icebergの使用」表を参照してください。
- ルート・メタデータ・ファイルのURLを直接指定して、AWS S3に格納されているIceberg表。
- SparkまたはAthenaで作成されたAWS Glueデータ・カタログに登録されたIceberg表。
- OCI上のIcebergの表:
- Hadoopカタログを使用してOCIデータ・フローで生成されたIceberg表。
詳細は、「Oracleデータ・フローの例」および「Hadoopカタログの使用」を参照してください。
- ルート・メタデータ・ファイルのURLを直接指定して、OCIオブジェクト・ストレージに格納されているIceberg表。
- Hadoopカタログを使用してOCIデータ・フローで生成されたIceberg表。
制限事項
- パーティションドIceberg表
Oracleでは、Icebergパーティション表はサポートされていません。
- Iceberg表の行レベルの更新
Oracleでは、Iceberg表更新の読取り時マージはサポートされていません。 Icebergメタデータで削除されたファイルが検出された問合せは失敗します。 マージ・オン・リードの詳細は、「列挙RowLevelOperationMode」を参照してください。
- スキーマの進化
Oracle外部表のスキーマは固定されており、外部表の作成時にIcebergスキーマのバージョンを反映しています。 Icebergメタデータが、Iceberg表の作成に使用したスキーマ・バージョンとは異なるスキーマ・バージョンを指している場合、問合せは失敗します。 外部表の作成後にIcebergスキーマが変更された場合は、外部表を再作成することをお薦めします。
親トピック: Apache Iceberg表の問合せ
Apache Iceberg表の問合せに関連する概念
次の概念を理解しておくと、「Apache Iceberg」表の問合せに役立ちます。
Icebergカタログ
Icebergカタログは、表メタデータ(表スナップショット、表スキーマおよびパーティション化情報など)を管理するサービスです。 Iceberg表の最新のスナップショットを問い合せるには、問合せエンジンが最初にカタログにアクセスし、最新のメタデータ・ファイルのロケーションを取得する必要があります。 AWS Glue、Hive、Nessie、Hadoopなど、利用可能なカタログ実装はすでに数多くあります。 Autonomous Databaseは、Sparkで使用されるAWS GlueカタログおよびHadoopCatalog実装をサポートしています。
詳細は、「オプティミスティック同時実行性」を参照してください。
メタデータ・ファイル
メタデータ・ファイルは、表のスナップショット、パーティション化スキームおよびスキーマ情報を追跡するJSONドキュメントです。 メタデータ・ファイルは、マニフェスト・リストとマニフェスト・ファイルの階層へのエントリ・ポイントです。 マニフェストは、表のデータファイル、およびパーティション分割やカラム統計などの情報を追跡します。 詳細は、「Iceberg表仕様」を参照してください。
トランザクション
Icebergは、copy-on-writeまたはmerge-on-readを使用した表に対する行レベルの更新をサポートしています。 Copy-on-writeは、更新された行を反映する新しいデータ・ファイルを生成し、merge-on-readは、読取り中にデータ・ファイルとマージする必要がある新しいdeleteファイルを生成します。 Oracleでは、コピー・オン・ライトがサポートされています。 iceberg表に対する問合せは、削除ファイルが検出されると失敗します。 詳細は、RowLevelOperationModeを参照してください。
スキーマ進化
Icebergはスキーマの進化をサポートしています。 スキーマの変更は、スキーマIDを使用してIcebergメタデータに反映されます。 Oracle外部表には、表の作成時に最新のスキーマ・バージョンによって決定される固定スキーマがあります。 Iceberg問合せは、問合せされたメタデータが表作成時に使用されたものとは異なるスキーマ・バージョンを指している場合に失敗します。 詳細は、「スキーマ進化」を参照してください。
パーティショニング
Icebergは、高コストのデータ・レイアウトを変更することなく、表のメタデータの処理/変更に依存する、非表示のパーティション化やパーティションの進化などの高度なパーティション化オプションをサポートしています。
親トピック: Apache Iceberg表の問合せ
例: Apache Iceberg表の問合せ
これらの例は、データ・カタログを使用して、ルート・マニフェスト・ファイルにダイレクトURLを使用して、Amazon Web Services (AWS)およびOracle Cloud Infrastructure (OCI)で「Apache Iceberg」表を問い合せる方法を示しています。
Apache Icebergの外部表の作成の詳細は、「CREATE_EXTERNAL_TABLE Apache Icebergのプロシージャ」を参照してください。
Glueデータ・カタログを使用したAWSでのIceberg表の問合せ
この例では、Iceberg表iceberg_parquet_time_dim
.を問い合せます
「図example_1_table.pngの説明」
表はGlueデータベースmy-iceberg-db
に属し、フォルダs3://my-iceberg-bucket/iceberg-loc
に格納されます。
iceberg_parquet_time_dim
の表の詳細を次に示します:

図example_1_details_v1.pngの説明
iceberg_parquet_time_dim
の外部表は、次のように作成できます:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => '',
format =>
'{"access_protocol":
{
"protocol_type": "iceberg",
"protocol_config":
{
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-west-1",
"iceberg_table_path": "my-iceberg-db.iceberg_parquet_time_dim"
}
}
}'
);
END;
/
protocol_configセクションで、表がカタログ・タイプとしてAWS Glueを使用するように指定し、カタログのリージョンをus-west-1
に設定します。
資格証明AWS_CRED
は、AWS APIキーでdbms_cloud.create_credential
を使用して作成されます。 Glueデータ・カタログ・インスタンスは、リージョンus-west-1
のAWS_CRED
に関連付けられたアカウントIDによって決定されます。これは、各アカウントにGlueデータ・カタログ・リージョンが1つあるためです。 protocol_config
セクションのiceberg_table_path
要素は、$database_name.$table_name
パスを使用してGlue表名およびデータベース名を指定します。 最後に、表のスキーマはIcebergメタデータから自動的に導出されるため、column_list
およびfield_list
パラメータはNULLのままになります。
資格証明の作成の詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。 AWS Glueリソースの詳細は、「AWS GlueリソースARNの指定」を参照してください。
ルート・メタデータ・ファイルのロケーションを使用したAWS上のIceberg表の問合せ
Iceberg表のメタデータ・ファイルのロケーションがわかっている場合は、次のようにカタログを指定せずに外部表を作成できます:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => 'https://my-iceberg-bucket.s3.us-west-1.amazonaws.com/iceberg-loc/metadata/00004-1758ee2d-a204-4fd9-8d52-d17e5371a5ce.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}');
END;
/
file_uri_list
パラメータを使用して、メタデータ・ファイルのロケーションをAWS S3仮想ホスト形式のURL形式で指定します。 この形式の詳細は、「AWS S3バケットにアクセスするためのメソッド」を参照してください。
この例では、データベースはメタデータ・ファイルに直接アクセスするため、format
パラメータにprotocol_config
セクションを指定する必要はありません。 メタデータ・ファイルのロケーションを使用して外部表を作成する場合、データベースはメタデータ・ファイルによって参照される最新のスナップショットを問い合せます。 新しいスナップショットおよび新しいメタデータ・ファイルを作成するIceberg表に対する後続の更新は、データベースには表示されません。
OCIでHadoopカタログを使用するIceberg表の問合せ
この例では、OCIデータ・フローを使用して作成されたIceberg表icebergTablePy
を問い合せます。ここで、SparkはIcebergカタログのHadoopCatalog実装を使用します。 HadoopCatalogは、warehouse
ディレクトリを使用して、Icebergメタデータをこのディレクトリの下の$database_name/$table_name
サブフォルダに配置します。 また、最新のメタデータ・ファイル・バージョンのバージョン番号を含むversion-hint.text
ファイルも使用します。 Githubの例については、「OCIデータ・フローでのIcebergのサポート」を参照してください。
サンプル表db.icebergTablePy
は、OCIバケットmy-iceberg-bucket
に、iceberg
という名前のwarehouse
フォルダを使用して作成されました。 表icebergTablePy
のOCIのストレージ・レイアウトを次に示します:

図example_3_table_v1.pngの説明
次のように、表db.icebergTablePy
の外部表を作成します:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
file_uri_list => '',
format =>'{"access_protocol":{"protocol_type":"iceberg",
"protocol_config":{"iceberg_catalog_type": "hadoop",
"iceberg_warehouse":"https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"}}}');
END;
/
ルート・メタデータ・ファイルのロケーションを使用したOCI上のIceberg表の問合せ
次のように、メタデータ・ファイルのURLを直接使用して、前の項で説明したIceberg表を問い合せることができます:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim4',
credential_name => 'OCI_CRED',
file_uri_list => 'https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg/db/icebergTablePy/metadata/v2.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/
この例では、file_uri_list
パラメータを使用して、ネイティブの「OCI URI」形式を使用してメタデータ・ファイルのURIを指定します。 メタデータ・ファイルURIを使用する場合、外部表は常に、特定のファイルに格納されている最新のスナップショットを問い合せます。 新しいスナップショットおよび新しいメタデータ・ファイルを生成する後続の更新には、問合せからアクセスできません。
ネイティブの「OCI URI」形式の詳細は、「クラウド・オブジェクト・ストレージURI形式」を参照してください。
親トピック: Apache Iceberg表の問合せ