Apache Iceberg-Tabellen abfragen
Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen.
- Informationen zum Abfragen von Apache Iceberg-Tabellen
Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen, die in Amazon Web Services (AWS) oder in Oracle Cloud Infrastructure (OCI) Object Storage gespeichert sind. - Konzepte zum Abfragen von Apache Iceberg-Tabellen
Ein Verständnis der folgenden Konzepte ist hilfreich für das Abfragen von Apache Iceberg-Tabellen. - Beispiele: Apache Iceberg-Tabellen abfragen
Diese Beispiele zeigen, wie Sie Apache Iceberg-Tabellen auf Amazon Web Services (AWS) und Oracle Cloud Infrastructure (OCI) mit einem Datenkatalog abfragen und direkte URLs für die Root-Manifestdatei verwenden.
Übergeordnetes Thema: Externe Daten mit Autonomous Database abfragen
Informationen zum Abfragen von Apache Iceberg-Tabellen
Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen, die in Amazon Web Services (AWS) oder in Oracle Cloud Infrastructure (OCI) Object Storage gespeichert sind.
Unterstützte Konfigurationen
- Iceberg-Tabellen auf AWS:
- Bei AWS Glue Data Catalog registrierte Iceberg-Tabellen, die mit Spark oder Athena erstellt wurden.
Weitere Informationen finden Sie unter Mit dem AWS Glue-Connector Apache Iceberg-Tabellen mit ACID-Transaktionen lesen und schreiben und Zeitreisen ausführen und Eisberg-Tabellen verwenden.
- Iceberg-Tabellen, die in AWS S3 gespeichert sind, indem Sie direkt die URL für die Root-Metadatendatei angeben.
- Bei AWS Glue Data Catalog registrierte Iceberg-Tabellen, die mit Spark oder Athena erstellt wurden.
- Iceberg-Tabellen auf OCI:
- Mit OCI Data Flow mit einem Hadoop-Katalog generierte Iceberg-Tabellen.
Weitere Informationen finden Sie unter Oracle Data Flow-Beispiele und Hadoop-Katalog verwenden.
- In OCI Object Storage gespeicherte Iceberg-Tabellen, indem Sie direkt die URL für die Root-Metadatendatei angeben.
- Mit OCI Data Flow mit einem Hadoop-Katalog generierte Iceberg-Tabellen.
Einschränkungen
- Partitionierte Iceberg-Tabellen
Oracle unterstützt keine Iceberg-partitionierten Tabellen.
- Aktualisierungen von Iceberg-Tabellen auf Zeilenebene
Oracle unterstützt keine Merge-on-Read-Funktion für Iceberg-Tabellenaktualisierungen. Abfragen, die auf gelöschte Dateien in den Iceberg-Metadaten stoßen, verlaufen nicht erfolgreich. Weitere Informationen zum Lesen der Zusammenführung finden Sie unter Enum RowLevelOperationMode.
- Schemaentwicklung
Das Schema für externe Oracle-Tabellen ist fest und spiegelt die Iceberg-Schemaversion zum Zeitpunkt der externen Tabellenerstellung wider. Abfragen sind nicht erfolgreich, wenn die Iceberg-Metadaten auf eine andere Schemaversion verweisen als die zum Erstellen der Iceberg-Tabelle verwendete. Wenn sich das Iceberg-Schema nach dem Erstellen der externen Tabelle ändert, wird empfohlen, die externe Tabelle neu zu erstellen.
Übergeordnetes Thema: Apache Iceberg-Tabellen abfragen
Konzepte zum Abfragen von Apache Iceberg-Tabellen
Die folgenden Konzepte sind für die Abfrage von Apache Iceberg-Tabellen hilfreich.
Iceberg-Katalog
Der Iceberg-Katalog ist ein Service, der Tabellenmetadaten wie Tabellen-Snapshots, das Tabellenschema und Partitionierungsinformationen verwaltet. Um den neuesten Snapshot für eine Iceberg-Tabelle abzufragen, müssen Abfrage-Engines zuerst auf den Katalog zugreifen und den Speicherort der neuesten Metadatendatei abrufen. Es gibt bereits eine Reihe verfügbarer Katalogimplementierungen, darunter AWS Glue, Hive, Nessie und Hadoop. Autonomous Database unterstützt den AWS Glue-Katalog und die HadoopCatalog-Implementierung, die von Spark verwendet wird.
Weitere Informationen finden Sie unter Optimistische Nebenläufigkeit.
Metadaten-Dateien
Die Metadatendatei ist ein JSON-Dokument, das die Tabellen-Snapshots, das Partitionierungsschema und die Schemainformationen verfolgt. Die Metadatendatei ist der Einstiegspunkt in eine Hierarchie aus Manifestlisten und Manifestdateien. Die Manifeste verfolgen die Datendateien der Tabelle zusammen mit Informationen wie Partitionierung und Spaltenstatistiken. Weitere Informationen finden Sie in der Eisberg-Tabellenspezifikation.
Transaktionen
Iceberg unterstützt Aktualisierungen auf Zeilenebene für Tabellen entweder mit Copy-on-Write oder Merge-on-Read. Copy-on-Write generiert neue Datendateien, die den aktualisierten Zeilen entsprechen, während Merge-on-Read neue "Löschdateien" generiert, die beim Lesen mit den Datendateien zusammengeführt werden müssen. Oracle unterstützt Copy-on-Write. Abfragen an Eisbergtabellen sind nicht erfolgreich, wenn sie auf eine Löschdatei stoßen. Weitere Informationen finden Sie in RowLevelOperationMode.
Schemaentwicklung
Iceberg unterstützt die Schemaentwicklung. Schemaänderungen werden mit einer Schema-ID in den Iceberg-Metadaten widergespiegelt. Beachten Sie, dass externe Oracle-Tabellen ein festes Schema aufweisen, das von der aktuellsten Schemaversion zum Zeitpunkt der Tabellenerstellung bestimmt wird. Iceberg-Abfragen sind nicht erfolgreich, wenn die abgefragten Metadaten auf eine andere Schemaversion verweisen als die bei der Tabellenerstellung verwendete. Weitere Informationen finden Sie in Schemaentwicklung.
Partitionierung
Iceberg unterstützt erweiterte Partitionierungsoptionen wie versteckte Partitionierung und Partitionsentwicklung, die auf der Verarbeitung/Änderung der Metadaten der Tabelle ohne kostspielige Änderungen des Datenlayouts basieren.
Übergeordnetes Thema: Apache Iceberg-Tabellen abfragen
Beispiele: Abfragen von Apache Iceberg-Tabellen
Diese Beispiele zeigen, wie Sie Apache Iceberg-Tabellen in Amazon Web Services (AWS) und Oracle Cloud Infrastructure (OCI) mit einem Datenkatalog abfragen und direkte URLs für die Root-Manifestdatei verwenden.
Ausführliche Informationen zum Erstellen externer Tabellen für Apache Iceberg finden Sie unter Prozedur CREATE_EXTERNAL_TABLE für Apache Iceberg.
Iceberg-Tabelle auf AWS mit einem Glue-Datenkatalog abfragen
In diesem Beispiel fragen wir die Iceberg-Tabelle ab: iceberg_parquet_time_dim
.
Beschreibung der Abbildung example_1_table.png
Die Tabelle gehört zur Glue-Datenbank my-iceberg-db
und wird im Ordner s3://my-iceberg-bucket/iceberg-loc
gespeichert.
Die Tabellendetails für iceberg_parquet_time_dim
werden hier angezeigt:

Beschreibung der Abbildung example_1_details_v1.png
Sie können eine externe Tabelle für iceberg_parquet_time_dim
wie folgt erstellen:
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;
/
Im Abschnitt protocol_config geben Sie an, dass die Tabelle AWS Glue als Katalogtyp verwendet und die Region des Katalogs auf us-west-1
gesetzt wird.
Die Zugangsdaten AWS_CRED
werden mit dbms_cloud.create_credential
mit einem AWS-API-Schlüssel erstellt. Die Instanz des Leimdatenkatalogs wird durch die Account-ID bestimmt, die mit AWS_CRED
für Region us-west-1
verknüpft ist, da für jeden Account ein einzelner Bereich des Leimdatenkatalogs vorhanden ist. Das Element iceberg_table_path
im Abschnitt protocol_config
verwendet einen $database_name.$table_name
-Pfad, um den Namen der Glue-Tabelle und den Datenbanknamen anzugeben. Schließlich werden die Parameter column_list
und field_list
nicht angegeben, weil das Schema der Tabelle automatisch aus den Iceberg-Metadaten abgeleitet wird.
Weitere Informationen zum Erstellen der Zugangsdaten finden Sie unter CREATE_CREDENTIAL-Prozedur. Informationen zu AWS Glue-Ressourcen finden Sie unter Angeben von AWS Glue-Ressourcen-ARNs.
Abfragen einer Iceberg-Tabelle auf AWS mit dem Speicherort der Root-Metadatendatei
Wenn wir den Speicherort der Metadatendatei für eine Iceberg-Tabelle kennen, können wir wie folgt eine externe Tabelle erstellen, ohne einen Katalog anzugeben:
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;
/
Mit dem Parameter file_uri_list
geben Sie den Speicherort der Metadatendatei im URL-Format S3 im virtuellen gehosteten AWS-Stil an. Informationen zu diesem Format finden Sie unter Methoden für den Zugriff auf einen AWS S3-Bucket.
In diesem Beispiel greift die Datenbank direkt auf die Metadatendatei zu. Daher muss im Parameter format
kein Abschnitt protocol_config
angegeben werden. Wenn Sie den Speicherort der Metadatendatei zum Erstellen einer externen Tabelle verwenden, fragt die Datenbank den zuletzt von der Metadatendatei referenzierten Snapshot ab. Nachfolgende Aktualisierungen der Iceberg-Tabelle, die neue Snapshots und neue Metadatendateien erstellen, sind für die Datenbank nicht sichtbar.
Iceberg-Tabelle abfragen, die Hadoop Catalog auf OCI verwendet
In diesem Beispiel wird die Iceberg-Tabelle icebergTablePy
abgefragt, die mit OCI Data Flow erstellt wurde. Dabei verwendet Spark die Implementierung HadoopCatalog für den Iceberg-Katalog. HadoopCatalog verwendet ein Verzeichnis warehouse
und platziert die Iceberg-Metadaten in einem Unterordner $database_name/$table_name
unter diesem Verzeichnis. Außerdem wird eine version-hint.text
-Datei verwendet, die die Versionsnummer für die neueste Metadatendateiversion enthält. Siehe Iceberg Support on OCI Data Flow für das Beispiel auf Github.
Die Beispieltabelle db.icebergTablePy
wurde mit einem warehouse
-Ordner namens iceberg
im OCI-Bucket my-iceberg-bucket
erstellt. Das Speicherlayout auf OCI für Tabelle icebergTablePy
wird unten angezeigt:

Beschreibung der Abbildung example_3_table_v1.png
Erstellen Sie wie folgt eine externe Tabelle für Tabelle 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;
/
Iceberg-Tabelle auf OCI mit dem Speicherort der Root-Metadatendatei abfragen
Sie können die im vorherigen Abschnitt beschriebene Iceberg-Tabelle wie folgt direkt mit der URL für die Metadatendatei abfragen:
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;
/
In diesem Beispiel verwenden wir den Parameter file_uri_list
, um die URI für die Metadatendatei mit dem nativen OCI-URI-Format anzugeben. Wenn Sie den URI der Metadatendatei verwenden, fragt die externe Tabelle immer den neuesten Snapshot ab, der in der spezifischen Datei gespeichert ist. Nachfolgende Aktualisierungen, die neue Snapshots und neue Metadatendateien generieren, sind für die Abfrage nicht zugänglich.
Weitere Informationen zum nativen OCI-URI-Format finden Sie unter URI-Formate für Cloud-Objektspeicher.
Übergeordnetes Thema: Apache Iceberg-Tabellen abfragen