Externe Tabellen mit impliziter Partitionierung abfragen

In Autonomous Database können Sie implizite partitionierte externe Tabellen aus im Hive-Stil partitionierten Daten oder aus im einfachen Ordner partitionierten Daten in Ihrem Cloud-Objektspeicher erstellen.

Externe Tabellen mit impliziter Partitionierung

Verwenden Sie in Autonomous Database die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE, um implizite partitionierte externe Tabellen aus im Hive-Stil partitionierten Daten oder aus im einfachen Ordner partitionierten Daten in Ihrem Cloud-Objektspeicher zu erstellen.

Verwenden Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE, um implizite partitionierte externe Tabellen zu erstellen. Wenn Sie die entsprechenden Optionen an dieses Verfahren übergeben, werden die Partitionen aus den Quelldaten abgeleitet. Die partitionierten externen Tabellen unterstützen die Laufzeiterkennung von Partitionsspalten und deren Werten. Die Laufzeiterkennung von Änderungen in der zugrunde liegenden Objektspeicherstruktur, wie das Hinzufügen oder Entfernen von Objekten, vereinfacht den Verwaltungsprozess, da keine zusätzlichen Synchronisierungsprozeduren erforderlich sind, die von DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE benötigt werden. Dadurch wird sichergestellt, dass die Daten zur Abfragelaufzeit auf dem neuesten Stand sind.

Bei der impliziten Partitionierung bestimmt Autonomous Database automatisch die Spalten, auf denen eine Tabelle "partitioniert" ist, basierend auf der hierarchischen Dateistruktur der Objektspeicherquelle. Ein Partitionierungsschema muss nicht explizit deklariert werden. Die implizite Partitionierung bietet partitioniertabellenartige Performancevorteile, ohne dass explizit eine partitionierte externe Tabelle mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE definiert werden muss.

Implizite partitionierte externe Tabellen unterstützen die folgenden Benennungsstile für partitionierte Objekte im Objektspeicher:

Weitere Informationen zu Benennungsformaten finden Sie unter Info über externe Tabellen mit der Partitionierung von Quelldateien.

Mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE können implizite partitionierte externe Tabellen wie folgt erstellt werden:
  • Partitionstyp mit einer bestimmten Liste von Partitionsspalten auf "hive" setzen

    In diesem Fall ist implicit_partition_type auf hive gesetzt, und implicit_partition_columns stellt eine Liste der Partitionsspalten bereit.

    Beispiele:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet",
                              "implicit_partition_type":"hive",
                              "implicit_partition_columns":["country","year","month"]}');
  • Partitionstyp auf "hive" setzen, ohne eine Liste der Partitionsspalten anzugeben

    In diesem Fall ist implicit_partition_type auf hive gesetzt, und implicit_partition_columns wird nicht angegeben. Die Partitionsspalten werden automatisch ermittelt, indem in dem durch file_uri_list angegebenen Pfad nach "=" gesucht wird. column_name befindet sich links neben "=", und der Wert befindet sich auf der rechten Seite. Wenn im Pfad keine column_name gefunden wird, wird ein Fehler ausgelöst.

    Beispiele:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_type":"hive"');
  • Geben Sie eine Liste der Partitionsspalten an, ohne den Typ anzugeben

    In diesem Fall ist implicit_partition_type nicht festgelegt, und implicit_partition_columns stellt eine Liste mit Spalten bereit.

    Beispiele:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet",
                              "implicit_partition_columns":["country","year","month"]}');

Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TABLE.

Externe implizite partitionierte Daten mit Quelldatei im Hive-Format abfragen

Verwenden Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE, um eine implizite partitionierte externe Tabelle aus Daten im Objektspeicher zu erstellen, die aus Hive-Daten generiert wurde.

Die Beispielquelldateien im folgenden Beispiel verwenden dieses Benennungsformat:

OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet

Betrachten Sie die folgenden Beispiele für Quelldateien:

OBJBUCKET/sales/country=USA/year=2024/month=01/sales-2024-01.parquet

OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-02.parquet

OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-03.parquet

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

  1. Speichern Sie Zugangsdaten für den Objektspeicher 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 Zugangsdaten für den Resource Principal 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 als Zugangsdatenname verwenden. Beachten Sie, dass dieser Schritt nur einmal ausgeführt werden muss, 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 Objektspeicherservices finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Erstellen Sie eine implizite partitionierte externe Tabelle auf Basis der Quelldateien mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    Da in diesem Beispiel die Formatoption implicit_partition_columns nicht angegeben ist, werden Partitionsspalten automatisch erkannt, und die implizite Partitionierung wird aktiviert, indem die Formatoption implicit_partition_type auf hive gesetzt wird.

    Wenn jedoch eine Liste mit Spalten angegeben wird, werden diese Spalten als Partitionsspalten verwendet, und Autonomous Database versucht nicht, die Spalten zu ermitteln.

    Um die Partitionsspalten zu ermitteln, sucht Autonomous Database ab dem Anfang des mit file_uri_list angegebenen Pfads nach "=". Wenn gefunden, wird der linke Teil von '=' bis zum letzten '/' als Spalte (z.B. "Land") und der rechte Teil von '=' bis zum ersten '/' als Wert (z.B. "USA") übernommen. Die Suche nach '=' wird fortgesetzt, bis nach dem '/', das auf den ersten Partitionswert folgt, das zweite '=' im Pfad ermittelt wird usw.

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_type":"hive"');

    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-URIs. Für diese Liste sind zwei Optionen verfügbar:

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

      • Einen einzelnen Datei-URI mit Platzhaltern angeben, 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 in der Datendatei und die Spalten, die aus dem Objektnamen abgeleitet werden (aus Namen im mit file_uri_list angegebenen Pfad).

      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. Die Option implicit_partition_type gibt den Datenformattyp als "hive" 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-Package - Formatoptionen.

    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.

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

  3. Jetzt können Sie Abfragen der externen partitionierten 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.

    Beispiele:

    SELECT product, units FROM mysales WHERE year='2024' and month='02'

    Diese SQL-Anweisung fragt nur Daten in der Partition für den Monat 02 des Jahres 2024 ab.

Externe implizite partitionierte Nicht-Hive-Stildaten abfragen

Verwenden Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE, um eine implizite partitionierte externe Tabelle aus Daten im Objektspeicher zu erstellen, die aus Nicht-Hive-Daten generiert wurde.

Die Beispielquelldateien im folgenden Beispiel verwenden dieses Benennungsformat:

OBJBUCKET/<table>/<value1>/<value2>/file.parquet

Betrachten Sie die folgenden Beispiele für Quelldateien:

OBJBUCKET/sales/USA/2024/01/sales-2024-01.parquet

OBJBUCKET/sales/USA/2024/01/sales-2024-02.parquet

OBJBUCKET/sales/USA/2024/01/sales-2024-03.parquet

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

  1. Speichern Sie Zugangsdaten für den Objektspeicher 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 Zugangsdaten für den Resource Principal 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 als Zugangsdatenname verwenden. Beachten Sie, dass dieser Schritt nur einmal ausgeführt werden muss, 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 Objektspeicherservices finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Erstellen Sie eine implizite partitionierte externe Tabelle auf Basis der Quelldateien mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    In diesem Beispiel wird die implizite Partitionierung aktiviert, indem den Partitionsspalten die Formatoption implicit_partition_columns bereitgestellt wird. Da der Ordnername die Partitionsspalten nicht enthält, können die mit file_uri_list angegebenen Partitionswerte im Pfad nur ermittelt werden, wenn mit der Formatoption implicit_partition_columns eine explizite Spaltenliste angegeben wird. Um die jeweiligen Spaltenwerte im Pfad zu erkennen, muss die Reihenfolge der Spalten mit der Reihenfolge der Werte übereinstimmen.

    Die Partitionsspalten werden automatisch erkannt.
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_columns":["country","year","month"]}');

    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-URIs. Für diese Liste sind zwei Optionen verfügbar:

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

      • Einen einzelnen Datei-URI mit Platzhaltern angeben, 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 in der Datendatei und die Spalten, die aus dem Objektnamen abgeleitet werden (aus Namen im mit file_uri_list angegebenen Pfad).

      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. Die Option implicit_partition_type ist deaktiviert. Da implicit_partition_columns angegeben ist, wird der Typ automatisch als nicht aktiv erkannt.

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

    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.

    Weitere Informationen zu den Parametern finden Sie unter Prozedur CREATE_EXTERNAL_TABLE.

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

  3. Jetzt können Sie Abfragen der externen partitionierten 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.

    Beispiele:

    SELECT product, units FROM mysales WHERE year='2024'

    Diese SQL-Anweisung fragt nur Daten in der Partition für das Jahr 2024 ab.