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. - Konzepte zur Abfrage von Apache Iceberg-Tabellen
Beim Abfragen von Apache Iceberg-Tabellen sind die folgenden Konzepte hilfreich. - Beispiele: Apache Iceberg-Tabellen abfragen
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.
Übergeordnetes Thema: Externe Daten mit Autonomous Database abfragen
Apache-Eisberg-Tabellen abfragen
Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen.
Unterstützte Konfigurationen
- Iceberg Tabellen auf Amazon Web Services 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 können Sie Apache Iceberg-Tabellen mit ACID-Transaktionen lesen und schreiben sowie Zeitreisen durchführen und Eisberg-Tabellen verwenden.
- Iceberg-Tabellen, die auf 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 in Oracle Cloud Infrastructure (OCI) Object Storage:
- Iceberg-Tabellen, die mit OCI Data Flow mit einem Hadoop-Katalog generiert wurden.
Weitere Informationen finden Sie unter Oracle Data Flow-Beispiele und Hadoop-Katalog verwenden.
- In OCI Object Storage gespeicherte Iceberg-Tabellen, indem die URL für die Root-Metadatendatei direkt angegeben wird.
- Iceberg-Tabellen, die mit OCI Data Flow mit einem Hadoop-Katalog generiert wurden.
- Iceberg-Tabellen, die in einem Apache REST Iceberg-Katalog definiert sind:
Hinweis
Nur Oracle Database 19c unterstützt Apache Iceberg Rest-Kataloge.- Externe Tabellen, deren Standortklausel auf eine Iceberg-Tabelle verweist, die in einem Iceberg-REST-Katalog definiert ist. Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TABLE für Apache Iceberg.
Einschränkungen
- Getrennte Eisbergtische
Oracle unterstützt keine partitionierten Iceberg-Tabellen.
- Aktualisierungen auf Zeilenebene von Iceberg-Tabellen
Oracle unterstützt keine Merge-on-Read-Vorgänge für Iceberg-Tabellenaktualisierungen. Abfragen, bei denen gelöschte Dateien in den Iceberg-Metadaten gefunden werden, schlagen fehl. Weitere Informationen zum Merge-on-Read finden Sie unter Enum RowLevelOperationMode.
- Schemaentwicklung
Das Schema für externe Oracle-Tabellen ist fest und spiegelt die Iceberg-Schemaversion beim Erstellen externer Tabellen wider. Abfragen sind nicht erfolgreich, wenn die Iceberg-Metadaten auf eine andere Schemaversion verweisen als die, mit der die Iceberg-Tabelle erstellt wurde. Wenn sich das Iceberg-Schema ändert, nachdem die externe Tabelle erstellt wurde, wird empfohlen, die externe Tabelle neu zu erstellen.
Übergeordnetes Thema: Apache Iceberg-Tabellen abfragen
Konzepte zur Abfrage von Apache-Eisberg-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.
Metatendateien
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 unter Iceberg Table Specification.
Transaktionen
Iceberg unterstützt Tabellenaktualisierungen auf Zeilenebene mit Copy-on-Write oder Merge-on-Read. Beim Copy-on-Write werden neue Datendateien generiert, die den aktualisierten Zeilen entsprechen. Beim Merge-on-Read werden neue "Löschdateien" generiert, die beim Lesen mit den Datendateien zusammengeführt werden müssen. Oracle unterstützt Copy-on-Write-Vorgänge. Abfragen an Eisberg-Tabellen sind nicht erfolgreich, wenn sie auf eine Löschdatei stoßen. Weitere Informationen finden Sie unter 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 beim Erstellen der Tabelle bestimmt wird. Iceberg-Abfragen schlagen fehl, wenn die abgefragten Metadaten auf eine andere Schemaversion als die beim Erstellen der Tabelle verwendete verweisen. Weitere Informationen finden Sie unter Schemaentwicklung.
Partitionierung
Iceberg unterstützt erweiterte Partitionierungsoptionen wie versteckte Partitionierung und Partitionsentwicklung, die auf der Verarbeitung/Änderung der Metadaten der Tabelle basieren, ohne dass kostspielige Änderungen am Datenlayout erforderlich sind.
Übergeordnetes Thema: Apache Iceberg-Tabellen abfragen
Beispiele: Abfragen von Apache Iceberg-Tabellen
In diesen Beispielen wird gezeigt, 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 CREATE_EXTERNAL_TABLE Procedure for Apache Iceberg.
Iceberg-Tabelle in AWS mit einem Glue-Datenkatalog abfragen
In diesem Beispiel fragen wir die Iceberg-Tabelle iceberg_parquet_time_dim
ab.
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 setzen Sie die Region des Katalogs auf us-west-1
.
Die Zugangsdaten AWS_CRED
werden mit dbms_cloud.create_credential
und einem AWS-API-Schlüssel erstellt. Die Glue Data Catalog-Instanz wird durch die Account-ID bestimmt, die AWS_CRED
für Region us-west-1
zugeordnet ist, da für jeden Account eine einzelne Glue Data Catalog-Region 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 bleiben die Parameter column_list
und field_list
null, da das Schema der Tabelle automatisch aus den Iceberg-Metadaten abgeleitet wird.
Weitere Informationen zum Erstellen der Zugangsdaten finden Sie unter Prozedur CREATE_CREDENTIAL. Informationen zu AWS Glue-Ressourcen finden Sie unter AWS Glue-Ressourcen-ARNs angeben.
Iceberg-Tabelle in AWS mit dem Speicherort der Root-Metadatendatei abfragen
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;
/
Wir verwenden den Parameter file_uri_list
, um den Speicherort der Metadatendatei im virtuellen gehosteten AWS-URL-Format S3 anzugeben. 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, sodass kein Abschnitt protocol_config
im Parameter format
angegeben werden muss. Wenn Sie den Speicherort der Metadatendatei zum Erstellen einer externen Tabelle verwenden, fragt die Datenbank den letzten Snapshot ab, der von der Metadatendatei referenziert wird. Nachfolgende Aktualisierungen der Iceberg-Tabelle, die neue Snapshots und neue Metadatendateien erstellen, sind für die Datenbank nicht sichtbar.
Iceberg-Tabelle abfragen, die den Hadoop-Katalog auf OCI verwendet
In diesem Beispiel fragen wir die Iceberg-Tabelle icebergTablePy
ab, die mit OCI Data Flow erstellt wurde. Dabei verwendet Spark die HadoopCatalog-Implementierung für den Iceberg-Katalog. HadoopCatalog verwendet ein Verzeichnis warehouse
und stellt die Iceberg-Metadaten in einen Unterordner $database_name/$table_name
unter dieses Verzeichnis. Außerdem wird eine version-hint.text
-Datei verwendet, die die Versionsnummer für die neueste Version der Metadatendatei enthält. Das Beispiel zu Github finden Sie unter Iceberg Support on OCI Data Flow.
Die Beispieltabelle db.icebergTablePy
wurde mit dem Ordner warehouse
mit dem Namen 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 folgendermaßen abfragen, indem Sie die URL für die Metadatendatei direkt verwenden:
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 jeweiligen 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