Externe Daten mit ORC-, Parkett- oder Avro-Quelldateien abfragen

Autonomous Database erleichtert den Zugriff auf ORC-, Parquet- oder Avro-Daten, die im Objektspeicher mit externen Tabellen gespeichert sind. In ORC-, Parquet- und Avro-Quellen sind Metadaten eingebettet, die von der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE verwendet werden können, um das Erstellen externer Tabellen zu vereinfachen.

Sie müssen die Struktur der Daten nicht kennen. DBMS_CLOUD kann die Datei prüfen und ORC-, Parquet- oder Avro-Inhalte in die äquivalenten Oracle-Spalten und Datentypen konvertieren. Sie müssen nur den Speicherort der Daten im Objektspeicher kennen, ihren Typ - ORC, Parquet oder Avro - angeben und über Zugangsdaten für den Zugriff auf die Quelldatei im Objektspeicher verfügen.

Hinweis

Die Schritte zur Verwendung externer Tabellen sind für ORC, Parkett und Avro sehr ähnlich. Diese Schritte zeigen das Arbeiten mit einer Quelldatei im Parkettformat.

Die Quelldatei in diesem Beispiel, sales_extended.parquet, enthält Daten im Parquet-Format. So fragen Sie diese Datei in Autonomous Database ab:

  1. Speichern Sie Ihre Objektspeicherzugangsdaten, um auf den Objektspeicher zuzugreifen. Verwenden Sie die Prozedur DBMS_CLOUD.CREATE_CREDENTIAL:
    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 Tabelle für ORC, Parquet oder Avro auf 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, darunter: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage oder Azure Data Lake Storage, Amazon S3 und Amazon S3-Kompatible, einschließlich: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage und Wasabi Hot Cloud Storage. Die Zugangsdaten stellen eine Eigenschaft auf Tabellenebene dar. Daher müssen sich die externen Dateien in demselben Objektspeicher befinden.

    Standardmäßig werden die Datentypen der in der externen Tabelle erstellten Spalten den Oracle-Datentypen für die Felder in den Quelldateien automatisch zugeordnet, und die Spaltennamen der externen Tabelle entsprechen den Quellfeldnamen.

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first"}'
     );
    END;
    /     
    

    Parameter:

    • 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 für Oracle-Objekte entsprechen. Weitere Informationen finden Sie unter Benennungsregeln für Datenbankobjekte.

    • file_uri_list: Eine durch Komma getrennte Liste der Quelldateien, die Sie abfragen möchten. Das URI-Format für dedizierte Endpunkte wird in kommerziellen Realms (OC1) unterstützt. Weitere Informationen finden Sie unter Dedizierte Object Storage-Endpunkte und DBMS_CLOUD-URI-Formate.

    • format: Definiert die Optionen zur Beschreibung des Formats der Quelldatei. Verwenden Sie für eine Parquet-Datei den Parameter format, um parquet für type anzugeben. Verwenden Sie für eine Avro-Datei den Parameter format, um type avro anzugeben. Verwenden Sie für eine ORC-Datei den Parameter format, um type orc anzugeben.

    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.

    Standardmäßig ist der Parameter format schema festgelegt, und die Spalten und Datentypen werden automatisch abgeleitet. Die Felder in der Quelle entsprechen den Spalten der externen Tabelle nach Namen. Quelldatentypen werden in die Oracle-Datentypen der externen Tabellenspalten gemäß der DBMS_CLOUD-Zuordnung für ORC-, Parquet- oder Avro-Datentypen konvertiert. Die gültigen schema-Parameterwerte sind:

    • first: Schema der ersten ORC-, Parkett- oder Avro-Datei, die DBMS_CLOUD in der angegebenen Datei file_uri_list findet, analysieren. (first ist der Standardwert für schema.)

    • all: Alle Schemas für alle ORC-, Parquet- oder Avro-Dateien in file_uri_list analysieren. Da es sich lediglich um Dateien handelt, die in einem Objektspeicher erfasst werden, gibt es keine Garantie, dass die Metadaten jeder Datei identisch sind. Beispiel: File1 kann ein Feld mit dem Namen "Adresse" enthalten, während File2 dieses Feld fehlt. Die Prüfung jeder Datei zum Ableiten der Spalten ist etwas aufwendiger, kann jedoch erforderlich sein, wenn die erste Datei nicht alle erforderlichen Felder enthält.

    Hinweis

    Wenn der Parameter column_list angegeben ist, geben Sie die Spaltennamen und Datentypen für die externe Tabelle an. Der Wert schema, falls angegeben, wird ignoriert. Mit column_list können Sie die Spalten in der externen Tabelle einschränken. Wenn column_list nicht angegeben ist, hat schema den Standardwert first.
  3. Jetzt können Sie Abfragen für die externe Tabelle ausführen, die Sie im vorherigen Schritt erstellt haben:
    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    SELECT prod_id, quantity_sold, gender, city, income_level 
         FROM sales_extended_ext 
         WHERE ROWNUM < 8;
    
         PROD_ID     QUANTITY_SOLD     GENDER    CITY              INCOME_LEVEL
    1    13          1                 M         Adelaide          K: 250,000 – 299,999
    2    13          1                 M         Dolores           L: 300,000 and above
    3    13          1                 M         Cayuga            F: 110,000 – 129,999
    4    13          1                 F         Bergen op Zoom    C: 50,000 – 69,999
    5    13          1                 F         Neuss             J: 190,000 – 249,999
    6    13          1                 F         Darwin            F: 110,000 – 129,999
    7    13          1                 M         Sabadell          K:250,000 – 299,999
    

    Diese Abfrage zeigt Werte für Zeilen in der externen Tabelle an. Wenn Sie diese Daten häufig abrufen möchten, können Sie sie nach der Prüfung mit DBMS_CLOUD.COPY_DATA in eine Tabelle laden.

Weitere Informationen finden Sie unter CREATE_EXTERNAL_TABLE Prozedur für Avro-, ORC- oder Parquet-Dateien und COPY_DATA Prozedur für Avro-, ORC- oder Parquet-Dateien.

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

Externe Daten mit ORC-, Parkett- oder Avro-Quelldateien abfragen und die Textspaltengröße explizit festlegen

Wenn Sie mit externen Tabellen in Autonomous Database auf ORC-, Parquet- oder Avro-Daten zugreifen, die im Objektspeicher gespeichert sind, können Sie die maximale Größe von Textspalten entweder automatisch oder explizit festlegen.

Standardmäßig wird die Textspaltengröße basierend auf dem Wert von MAX_STRING_SIZE festgelegt.

Die Quelldatei in diesem Beispiel, sales_extended.parquet, enthält Daten im Parquet-Format. So fragen Sie diese Datei in Autonomous Database ab und legen die maximale Textspaltengröße fest:

  1. Speichern Sie Ihre Objektspeicherzugangsdaten, um auf den Objektspeicher zuzugreifen. Verwenden Sie die Prozedur DBMS_CLOUD.CREATE_CREDENTIAL:
    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 externe Tabelle für ORC, Parquet oder Avro auf Basis der Quelldateien mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE, und geben Sie den Formatparameter maxvarchar an.

    Die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE unterstützt externe Dateien in den unterstützten Cloud-Objektspeicherservices, darunter: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage oder Azure Data Lake Storage, Amazon S3 und Amazon S3-Kompatible, einschließlich: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage und Wasabi Hot Cloud Storage. Die Zugangsdaten stellen eine Eigenschaft auf Tabellenebene dar. Daher müssen sich die externen Dateien in demselben Objektspeicher befinden.

    Standardmäßig werden die Datentypen der in der externen Tabelle erstellten Spalten den Oracle-Datentypen für die in den Quelldateien gefundenen Felder automatisch zugeordnet, und die externen Tabellenspaltennamen entsprechen den Quellfeldnamen.

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first", "maxvarchar":"extended"}'
     );
    END;
    /     
    

    Parameter:

    • 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 für Oracle-Objekte entsprechen. Weitere Informationen finden Sie unter Benennungsregeln für Datenbankobjekte.

    • file_uri_list: Eine durch Komma getrennte Liste der Quelldateien, die Sie abfragen möchten. Das URI-Format für dedizierte Endpunkte wird in kommerziellen Realms (OC1) unterstützt. Weitere Informationen finden Sie unter Dedizierte Object Storage-Endpunkte und DBMS_CLOUD-URI-Formate.

    • format: Definiert die Optionen zur Beschreibung des Formats der Quelldatei. Verwenden Sie für eine Parquet-Datei den Parameter format, um type parquet anzugeben. Verwenden Sie für eine Avro-Datei den Parameter format, um type avro anzugeben. Verwenden Sie für eine ORC-Datei den Parameter format, um type orc anzugeben.

      Die Option maxvarchar mit dem Wert extended gibt an, dass Textspalten als varchar(32767) auf einer Autonomous Database-Instanz mit erweiterter Zeichenfolgengröße erstellt werden. Mögliche Werte sind standard mit varchar(4000), extended mit varchar(32767) und auto. Der maxvarchar-Standardwert ist auto. Bei diesem Wert basiert die maximale Textgröße auf dem Wert von MAX_STRING_SIZE.

    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.

    Standardmäßig ist der Parameter format schema festgelegt, und die Spalten und Datentypen werden automatisch abgeleitet. Die Felder in der Quelle entsprechen den Spalten der externen Tabelle nach Namen. Quelldatentypen werden gemäß der DBMS_CLOUD-Zuordnung für ORC-, Parquet- oder Avro-Datentypen in die Oracle-Datentypen der externen Tabelle konvertiert. Die gültigen schema-Parameterwerte sind:

    • first: Schema der ersten ORC-, Parquet- oder Avro-Datei analysieren, die DBMS_CLOUD in der angegebenen Datei file_uri_list findet. (first ist der Standardwert für schema.)

    • all: Alle Schemas für alle ORC-, Parquet- oder Avro-Dateien in file_uri_list analysieren. Da es sich lediglich um Dateien handelt, die in einem Objektspeicher erfasst werden, gibt es keine Garantie, dass die Metadaten jeder Datei identisch sind. Beispiel: File1 kann ein Feld mit dem Namen "Adresse" enthalten, während File2 dieses Feld möglicherweise nicht enthält. Die Prüfung jeder Datei zur Ableitung der Spalten ist etwas aufwendiger, kann jedoch erforderlich sein, wenn die erste Datei nicht alle erforderlichen Felder enthält.

    Hinweis

    Wenn der Parameter column_list angegeben ist, geben Sie die Spaltennamen und Datentypen für die externe Tabelle an. Der Wert schema, falls angegeben, wird ignoriert. Mit column_list können Sie die Spalten in der externen Tabelle einschränken. Wenn column_list nicht angegeben ist, hat schema-den Standardwert first.
  3. Jetzt können Sie Abfragen für die externe Tabelle ausführen, die Sie im vorherigen Schritt erstellt haben:
    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    SELECT prod_id, quantity_sold, gender, city, income_level 
         FROM sales_extended_ext 
         WHERE ROWNUM < 8;
    
         PROD_ID     QUANTITY_SOLD     GENDER    CITY              INCOME_LEVEL
    1    13          1                 M         Adelaide          K: 250,000 – 299,999
    2    13          1                 M         Dolores           L: 300,000 and above
    3    13          1                 M         Cayuga            F: 110,000 – 129,999
    4    13          1                 F         Bergen op Zoom    C: 50,000 – 69,999
    5    13          1                 F         Neuss             J: 190,000 – 249,999
    6    13          1                 F         Darwin            F: 110,000 – 129,999
    7    13          1                 M         Sabadell          K:250,000 – 299,999
    

    Diese Abfrage zeigt Werte für Zeilen in der externen Tabelle an. Wenn Sie diese Daten häufig abrufen möchten, können Sie sie nach der Prüfung mit DBMS_CLOUD.COPY_DATA in eine Tabelle laden.

    Wenn Sie die Option format maxvarchar als standard angeben, werden die Textspalten varchar2() mit der Größe 4000 erstellt. Beispiele:

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first", "maxvarchar":"standard"}'
     );
    END;
    /     
    

    Der Parameter format, bei dem die Option maxvarchar auf den Wert standard gesetzt ist, gibt an, dass Textspalten als varchar(4000) erstellt werden.

    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(4000) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(4000) 
    CITY                 VARCHAR2(4000) 
    STATE_PROVINCE       VARCHAR2(4000) 
    INCOME_LEVEL         VARCHAR2(4000)
    

Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TABLE für Avro-, ORC- oder Parquet-Dateien und Prozedur COPY_DATA für Avro-, ORC- oder Parquet-Dateien.

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