Externe partitionierte Daten mit Quelldatei im Hive-Format abfragen

Verwenden Sie DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE, um eine externe partitionierte Tabelle zu erstellen und die Partitionierungsinformationen aus dem Dateipfad für den Cloud-Objektspeicher zu generieren.

Beachten Sie die folgenden Beispielquelldateien im Objektspeicher:

custsales/month=2019-01/custsales-2019-01.csv

custsales/month=2019-02/custsales-2019-02.csv

custsales/month=2019-03/custsales-2019-03.csv

Bei dieser Benennung werden die Werte für month im Objektnamen erfasst.

Um eine partitionierte externe Tabelle mit Daten zu erstellen, die in diesem Hive-Beispielformat gespeichert sind, gehen Sie wie folgt vor:

  1. Speichern Sie Objektspeicherzugangsdaten 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 partitionierte Tabelle auf der 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 die externen Dateien alle in demselben Cloud-Objektspeicher befinden.

    Beispiel:

    BEGIN
        DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
            TABLE_NAME => 'sales_sample',
            CREDENTIAL_NAME => 'DEF_CRED_NAME',
            FILE_URI_LIST => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet',
            FORMAT => '{"type":"parquet", "schema": "first","partition_columns":[{"name":"month","type":"varchar2(100)"}]}');
    END;
    /

    Die Parameter sind:

    • 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-URIs. Diese Liste enthält zwei Optionen:

      • Geben Sie eine durch Komma getrennte Liste einzelner Datei-URIs ohne Platzhalter an.

      • Geben Sie eine einzelne Datei-URI mit Platzhaltern 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 durch Komma getrennte Liste der Spaltennamen und Datentypen für die externe Tabelle. Die Liste enthält die Spalten innerhalb der Datendatei und die Spalten, die aus dem Objektnamen abgeleitet werden (aus den Namen im Dateipfad).

      Die column_list ist nicht erforderlich, wenn es sich bei den Datendateien um strukturierte Dateien (Parquet, 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.

      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.

      Weitere Informationen finden Sie unter DBMS_CLOUD Packageformatoptionen.

    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.

    Der Aufruf DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE würde zur folgenden Tabellendefinition führen:

    CREATE TABLE "ADMIN"."SALES_SAMPLE"
       ( "DAY_ID" TIMESTAMP (6),
          "GENRE_ID" NUMBER(19,0),
          "MOVIE_ID" NUMBER(19,0),
          "CUST_ID" NUMBER(19,0),
          "APP" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DEVICE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "OS" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "PAYMENT_METHOD" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "LIST_PRICE" BINARY_DOUBLE,
          "DISCOUNT_TYPE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DISCOUNT_PERCENT" BINARY_DOUBLE,
          "ACTUAL_PRICE" BINARY_DOUBLE,
          "MONTH" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP"
       ) DEFAULT COLLATION "USING_NLS_COMP"
       ORGANIZATION EXTERNAL
        ( TYPE ORACLE_BIGDATA
          DEFAULT DIRECTORY "DATA_PUMP_DIR"
          ACCESS PARAMETERS
          ( com.oracle.bigdata.fileformat=parquet
    com.oracle.bigdata.filename.columns=["month"]
    com.oracle.bigdata.file_uri_list="https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet"
    com.oracle.bigdata.credential.schema="ADMIN"
    com.oracle.bigdata.credential.name=CRED_OCI
    com.oracle.bigdata.trimspaces=notrim
      )
        )
       REJECT LIMIT 0
      PARTITION BY LIST ("MONTH")
     (PARTITION "P1" VALUES (('2019-01'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-01/*.parquet'
           ),
     PARTITION "P2" VALUES (('2019-02'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-02/*.parquet'
           ))
      PARALLEL ;

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

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

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

    Autonomous Database nutzt die Partitionierungsinformationen der externen partitionierten Tabelle, um sicherzustellen, dass die Abfrage nur auf die relevanten Datendateien im Objektspeicher zugreift.

    Beispiel:

    SELECT movie_id, month FROM sales WHERE month='2019-02'

    Die externen partitionierten Tabellen, die Sie mit DBMS_CLOUD.CREATE_EXTERNAL_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. Weitere Informationen finden Sie unter Metadatenspalten für externe Tabellen.

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 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.