Apache Iceberg-Tabellen abfragen

Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen.

Apache-Eisberg-Tabellen abfragen

Autonomous Database unterstützt das Abfragen von Apache Iceberg-Tabellen.

Unterstützte Konfigurationen

Diese spezifischen Konfigurationen werden unterstützt:

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.

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.

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.Eine Beschreibung von example_1_table.png folgt
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 von example_1_details_v1.png folgt
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 von example_3_table_v1.png folgt
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.