Abfrage externer partitionierter Daten mit Quelldatei im Ordnerformat

Verwenden Sie DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE, um eine externe partitionierte Tabelle zu erstellen und die Partitionierungsinformationen aus dem Pfad der Cloud-Objektspeicher zu generieren.

Wenn Sie eine externe Tabelle mit Datendateien im Ordnerformat erstellen, haben Sie zwei Möglichkeiten, die Typen der Partitionsspalten anzugeben:

  • Sie können die Spalten und ihre Datentypen manuell mit dem Parameter column_list angeben. Ein Beispiel mit dem Parameter column_list finden Sie unter Externe partitionierte Daten mit der Quelldateiorganisation im Hive-Format abfragen.

  • Sie können DBMS_CLOUD die Datendatei-Spalten und ihre Typen aus Informationen in strukturierten Dateien wie Avro-, ORC- und Parquet-Datendateien ableiten lassen. In diesem Fall verwenden Sie die Option partition_columns mit dem Parameter format, um die Spaltennamen und deren Datentypen für die Partitionsspalten anzugeben. Sie brauchen dann die Parameter column_list und field_list nicht anzugeben.

Betrachten Sie die folgenden Beispielquelldateien im Objektspeicher:

.../sales/USA/2020/01/sales1.parquet

.../sales/USA/2020/02/sales2.parquet

Um eine partitionierte externe Tabelle zu erstellen, bei der der Dateipfad für den Cloud-Objektspeicher die Partitionen aus Dateien mit diesem Beispielordnerformat definiert, gehen Sie folgendermaßen vor:

  1. Speichern Sie Ihre Objektspeicherzugangsdaten mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiele:

    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 Oracle Cloud Infrastructure Object Storage ist nicht erforderlich, wenn Sie Ressourcen-Principal-Zugangsdaten aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen verwenden.

    Dieser Vorgang speichert die Zugangsdaten in einem verschlüsselten Format in der Datenbank. Sie können einen beliebigen Namen für die Zugangsdaten verwenden. Beachten Sie, dass dieser Schritt nur einmal erforderlich ist, es sei denn, die Zugangsdaten für den Objektspeicher ändern sich. 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 Object Storage-Services finden Sie unter Prozedur CREATE_CREDENTIAL.

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

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

    Beispiele:

    BEGIN DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
        table_name => 'MYSALES',
        credential_name => 'DEF_CRED_NAME',
        file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales/*.parquet',
        format =>
            json_object('type' value 'parquet', 'schema' value 'first',
                        'partition_columns' value
                              json_array(
                                    json_object('name' value 'country', 'type' value 'varchar2(100)'),
                                    json_object('name' value 'year', 'type' value 'number'),
                                    json_object('name' value 'month', 'type' value 'varchar2(2)')
                              )
             )
        );
    END;
    /

    Für die DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE-Parameter für strukturierte Datendateien, z.B. für eine Parquet-Datendatei, sind die Parameter column_list oder field_list nicht erforderlich. Die Spaltennamen und Datentypen für die Spalten werden aus der ersten Parquet-Datei abgeleitet, die die Prozedur scannt (und daher müssen alle Dateien dieselbe Form haben). Die generierte Spaltenliste enthält die vom Objektnamen abgerufenen Spalten, und diese Spalten haben die Datentypen, die mit dem Parameter partition_columns format angegeben werden.

    Parameter:

    • table_name: Der Name der externen Tabelle.

    • credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden.

    • file_uri_list: ist eine durch Komma getrennte Liste der Quelldatei-URs. Für diese Liste gibt es zwei Optionen:

      • Eine durch Komma getrennte Liste mit einzelnen Datei-URIs ohne Platzhalter angeben.

      • Geben Sie einen einzelnen Datei-URI mit Platzhalter an, wobei die Platzhalter nur nach dem letzten Schrägstrich "/" stehen dürfen. Das Zeichen "*" kann als Platzhalter für mehrere Zeichen, das Zeichen "?" als Platzhalter für ein einzelnes Zeichen verwendet werden.

    • column_list: ist eine kommagetrennte Liste der Spaltennamen und Datentypen für die externe Tabelle. Die Liste enthält die Spalten in der Datei sowie die Spalten, die aus dem Objektnamen abgeleitet wurden.

      column_list ist nicht erforderlich, wenn es sich bei den Datendateien nicht um strukturierte Dateien (Parkett, Avro oder ORC) handelt.

    • field_list: Identifiziert die Felder in den Quelldateien und deren Datentypen. Der Standardwert ist NULL, d.h. die Felder und ihre Datentypen werden durch den Parameter column_list bestimmt.

      field_list ist nicht erforderlich, wenn es sich bei den Datendateien nicht um strukturierte Dateien (Parkett, Avro oder ORC) handelt.

    • format: Definiert die Optionen, die Sie zur Beschreibung des Formats der Quelldatei angeben können. Der Parameter partition_columns format gibt die Namen der Partitionsspalten an. Weitere Informationen finden Sie unter DBMS_CLOUD Packageformatoptionen.

      Wenn die Daten in der Quelldatei verschlüsselt sind, entschlüsseln Sie die Daten, indem Sie die Formatoption encryption angeben. Weitere Informationen zum Entschlüsseln von Daten finden Sie unter Daten beim Importieren aus Object Storage entschlüsseln.

    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.

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

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

    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. Als Alternative können Sie auch die erstellte externe partitionierte 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 und Externe partitionierte Daten validieren.

  3. Jetzt können Sie Abfragen der externen Tabelle ausführen, die Sie im vorherigen Schritt erstellt haben.

    Autonomous Database nutzt die Partitionierungsinformationen der externen partitionierten Tabelle und stellt sicher, dass die Abfrage nur auf die relevanten Datendateien im Objektspeicher zugreift. Beispiel: Mit der folgenden Abfrage werden nur Datendateien aus einer Partition gelesen.

    Beispiele:

    SELECT year, month, product, units 
    FROM SALES WHERE year='2020' AND month='02' AND country='USA'

    Die externen partitionierten Tabellen, die Sie mit DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE erstellen, enthalten zwei unsichtbare Spalten: file$path und file$name. Anhand dieser Spalten können Sie ermitteln, aus welcher Datei ein Datensatz stammt. Weitere Informationen finden Sie unter Metadatenspalten externer Tabellen.