Externe Daten mit ORC-, Parquet- 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, und die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE kann diese Metadaten verwenden, um die Erstellung externer Tabellen zu vereinfachen.

Sie müssen die Struktur der Daten nicht kennen. DBMS_CLOUD kann die Datei untersuchen und ORC-, Parquet- oder Avro-Inhalte in die entsprechenden Oracle-Spalten und -Datentypen konvertieren. Sie müssen nur den Speicherort der Daten im Objektspeicher kennen, dessen 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, Parquet und Avro sehr ähnlich. Diese Schritte zeigen die Arbeit mit einer Quelldatei im Parquet-Format.

Die Quelldatei in diesem Beispiel, sales_extended.parquet, enthält Parquet-Formatdaten. Um diese Datei in Autonomous Database abzufragen, gehen Sie wie folgt vor:

  1. Speichern Sie die Zugangsdaten des Objektspeichers, um mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL auf den Objektspeicher zuzugreifen:
    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 für ORC, Parquet oder Avro 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, einschließlich: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage oder Azure Data Lake Storage, Amazon S3 und Amazon S3-kompatibel, 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 ordnen die in der externen Tabelle erstellten Spalten ihre Datentypen automatisch den Oracle-Datentypen für die Felder in den Quelldateien zu, und die Spaltennamen der externen Tabelle stimmen mit den Namen der Quellfelder überein.

    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;
    /     
    

    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.

    • 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, die zur Beschreibung des Formats der Quelldatei stehen. 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.

    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, und die Felder in der Quelle stimmen mit den Spalten der externen Tabelle nach Name überein. Quelldatentypen werden gemäß dem DBMS_CLOUD-Mapping für die Datentypen ORC, Parquet oder Avro in die Oracle-Datentypen der externen Tabellenspalte konvertiert. Die gültigen Parameterwerte für schema sind:

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

    • all: Analysieren Sie alle Schemas für alle ORC-, Parquet- oder Avro-Dateien in der Datei file_uri_list. Da es sich lediglich um Dateien handelt, die in einem Objektspeicher erfasst werden, gibt es keine Garantie dafür, dass die Metadaten jeder Datei identisch sind. Beispiel: File1 kann ein Feld namens "Adresse" enthalten, während in File2 dieses Feld möglicherweise fehlt. Die Prüfung jeder Datei zur Ableitung der Spalten ist etwas teurer, 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 und den Wert schema an, sofern angegeben, ignoriert wird. Mit column_list können Sie die Spalten in der externen Tabelle begrenzen. Wenn column_list nicht angegeben ist, lautet der Standardwert schema 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 abfragen möchten, können Sie sie nach der Prüfung der Daten in eine Tabelle mit DBMS_CLOUD.COPY_DATA laden.

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-Objektspeicherservices finden Sie unter DBMS_CLOUD URI-Formate.

Externe Daten mit ORC-, Parquet- oder Avro-Quelldateien abfragen und 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 MAX_STRING_SIZE festgelegt.

Die Quelldatei in diesem Beispiel, sales_extended.parquet, enthält Parquet-Formatdaten. Um diese Datei in Autonomous Database abzufragen und die maximale Textspaltengröße festzulegen, gehen Sie wie folgt vor:

  1. Speichern Sie die Zugangsdaten des Objektspeichers, um mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL auf den Objektspeicher zuzugreifen:
    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 für ORC, Parquet oder Avro über Ihren 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, einschließlich: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage oder Azure Data Lake Storage, Amazon S3 und Amazon S3-kompatibel, 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 ordnen die in der externen Tabelle erstellten Spalten ihre Datentypen automatisch den Oracle-Datentypen für die Felder in den Quelldateien zu, und die Spaltennamen der externen Tabelle stimmen mit den Namen der Quellfelder überein.

    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;
    /     
    

    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.

    • 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, die zur Beschreibung des Formats der Quelldatei stehen. 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. Die möglichen Werte sind standard mit varchar(4000), extended mit varchar(32767) und auto. Der Standardwert für maxvarchar ist auto. Bei diesem Wert basiert die maximale Textgröße auf dem Wert 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, und die Felder in der Quelle stimmen mit den Spalten der externen Tabelle nach Name überein. Quelldatentypen werden gemäß dem DBMS_CLOUD-Mapping für die Datentypen ORC, Parquet oder Avro in die Oracle-Datentypen der externen Tabellenspalte konvertiert. Die gültigen Parameterwerte für schema sind:

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

    • all: Analysieren Sie alle Schemas für alle ORC-, Parquet- oder Avro-Dateien in der Datei file_uri_list. Da es sich lediglich um Dateien handelt, die in einem Objektspeicher erfasst werden, gibt es keine Garantie dafür, dass die Metadaten jeder Datei identisch sind. Beispiel: File1 kann ein Feld namens "Adresse" enthalten, während in File2 dieses Feld möglicherweise fehlt. Die Prüfung jeder Datei zur Ableitung der Spalten ist etwas teurer, 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 und den Wert schema an, sofern angegeben, ignoriert wird. Mit column_list können Sie die Spalten in der externen Tabelle begrenzen. Wenn column_list nicht angegeben ist, lautet der Standardwert schema 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 abfragen möchten, können Sie sie nach der Prüfung der Daten in eine Tabelle mit DBMS_CLOUD.COPY_DATA laden.

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

    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 mit der Option maxvarchar, die 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-Objektspeicherservices finden Sie unter DBMS_CLOUD URI-Formate.