Externe Daten abfragen

Um Daten in Dateien in der Cloud abzufragen, müssen Sie zuerst Ihre Objektspeicherzugangsdaten in Autonomous Database speichern und dann eine externe Tabelle mit der PL/SQL-Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE erstellen.

Mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE können Sie auch externe Daten in angehängten Dateisystemen oder im lokalen Dateisystem abfragen.

Die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE unterstützt externe Dateien in den unterstützten Cloud-Objektspeicherservices. Dazu gehören:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage oder Azure Data Lake Storage

  • Amazon S3

  • Amazon S3-kompatibel, einschließlich: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage und Wasabi Hot Cloud Storage.

  • GitHub-Repository

Die Quelldatei in diesem Beispiel channels.txt enthält die folgenden Daten:

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  1. Speichern Sie die Zugangsdaten für den Objektspeicher mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiel:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    Das Erstellen von Zugangsdaten für den Zugriff auf den Oracle Cloud Infrastructure-Objektspeicher ist nicht erforderlich, wenn Sie Resource-Principal-Zugangsdaten aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen nutzen.

    Bei diesem Vorgang werden die Zugangsdaten in der Datenbank in einem verschlüsselten Format gespeichert. Sie können einen beliebigen Namen für den Zugangsdatennamen verwenden. Beachten Sie, dass dieser Schritt nur einmal erforderlich ist, wenn sich die Zugangsdaten des Objektspeichers nicht ändern. Nachdem Sie die Zugangsdaten gespeichert haben, können Sie denselben Zugangsdatennamen zum Erstellen externer Tabellen verwenden.

    Informationen zu den Parametern username und password für verschiedene Objektspeicherservices finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Erstellen Sie eine externe Tabelle auf der Basis der Quelldateien mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    Die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE unterstützt externe Dateien in den unterstützten Cloud-Objektspeicherservices. Die Zugangsdaten stellen eine Eigenschaft auf Tabellenebene dar. Daher müssen sich die externen Dateien in demselben Objektspeicher befinden.

    Beispiel:

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'CHANNELS_EXT',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/channels.txt',
        format => json_object('delimiter' value ','),
        column_list => 'CHANNEL_ID VARCHAR2(2), CHANNEL_DESC VARCHAR2(20), CHANNEL_CLASS VARCHAR2(20)' );
    END;
    /
    

    Die Parameter sind:

    • table_name: Der Name der externen Tabelle.

    • credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden. Der Parameter credential_name muss den Benennungskonventionen von Oracle-Objekten entsprechen. Weitere Informationen finden Sie unter Benennungsregeln für Datenbankobjekte.

      Der Parameter credential_name wird nicht verwendet, wenn Sie ein Verzeichnis oder eine Tabellen-Hyperlink-URL mit file_uri_list angeben. Weitere Informationen finden Sie unter Verzeichnisse in Autonomous Database erstellen und verwalten und Info zu Tabellenhyperlinks in Autonomous Database.

    • file_uri_list: Eine durch Komma getrennte Liste der Quelldateien, die Sie abfragen möchten.

    • format: Definiert die Optionen, die Sie zur Beschreibung des Formats der Quelldatei angeben können.

      Wenn die Daten in den Quelldateien verschlüsselt sind, entschlüsseln Sie die Daten, indem Sie den Parameter format mit der Option encryption angeben. Weitere Informationen zum Entschlüsseln von Daten finden Sie unter Daten beim Importieren aus Object Storage entschlüsseln.

    • column_list: Eine durch Komma getrennte Liste der Spaltendefinitionen in den Quelldateien.

    In diesem Beispiel ist namespace-string der Oracle Cloud Infrastructure-Objektspeicher-Namespace und bucketname der Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.

    Hinweis

    Autonomous Database unterstützt eine Vielzahl von Quelldateiformaten, einschließlich komprimierter Datenformate. Informationen zu den unterstützten Komprimierungstypen finden Sie unter DBMS_CLOUD Packageformatoptionen und der Formatoption DBMS_CLOUD compression.

    Jetzt können Sie Abfragen für die externe Tabelle ausführen, die Sie im vorherigen Schritt erstellt haben. Beispiel:

    SELECT count(*) FROM channels_ext;

    Standardmäßig erwartet die Datenbank, dass alle Zeilen in der externen Datendatei gültig sind und sowohl mit den Zieldatentypdefinitionen als auch der Formatdefinition der Dateien übereinstimmen. Wenn die Quelldateien Zeilen enthalten, die nicht mit den angegebenen Formatoptionen übereinstimmen, gibt die Abfrage einen Fehler aus. Sie können DBMS_CLOUD-Parameter wie rejectlimit verwenden, um diese Fehler zu unterdrücken. Alternativ können Sie auch die erstellte externe Tabelle validieren, um die Fehlermeldungen und abgelehnten Zeilen anzuzeigen, damit Sie die Formatoptionen entsprechend ändern können. Weitere Informationen finden Sie unter Externe Daten validieren.

    Ausführliche Informationen zu den Parametern finden Sie unter CREATE_EXTERNAL_TABLE-Prozedur.

    Weitere Informationen zu den unterstützten Cloud-Objektspeicherservices finden Sie unter DBMS_CLOUD URI-Formate.

Metadatenspalten für externe Tabelle

Mit den Metadaten der externen Tabelle können Sie bestimmen, woher die Daten stammen, wenn Sie eine Abfrage ausführen.

Die externen Tabellen, die Sie mit DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE oder DBMS_CLOUD.CREATE_HYBRID_PART_TABLE erstellen, enthalten zwei unsichtbare Spalten file$path und file$name. Mit diesen Spalten können Sie ermitteln, aus welcher Datei ein Datensatz stammt.

  • file$path: Gibt den Dateipfadtext bis zum Anfang des Objektnamens an.

  • file$name: Gibt den Objektnamen an, einschließlich des gesamten Textes, der dem letzten "/" folgt.

Beispiel:

SELECT genre_id, name, file$name, file$path FROM ext_genre
     WHERE rownum <= 2;

genre_id      name        file$name     file$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

Weitere Informationen zu unsichtbaren Spalten finden Sie unter Unsichtbare Spalten.