Esegui query su dati esterni

Per eseguire query sui dati nei file nel cloud, è necessario prima memorizzare le credenziali di storage degli oggetti nell'Autonomous Database, quindi creare una tabella esterna utilizzando la procedura PL/SQL DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

È anche possibile utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE per eseguire query sui dati esterni nei file system allegati o nel file system locale.

La procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE supporta i file esterni nei servizi di storage degli oggetti cloud supportati, tra cui:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage o Azure Data Lake Storage

  • Amazon S3

  • Compatibile con Amazon S3, tra cui Oracle Cloud Infrastructure Object Storage, Google Cloud Storage e Wasabi Hot Cloud Storage.

  • GitHub Repository

Il file di origine in questo esempio, channels.txt, contiene i seguenti dati:

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  1. Memorizzare le credenziali dell'area di memorizzazione degli oggetti utilizzando la procedura DBMS_CLOUD.CREATE_CREDENTIAL.

    Ad esempio:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    La creazione di una credenziale per accedere all'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure non è necessaria se si abilitano le credenziali del principal risorsa. Per ulteriori informazioni, consulta la sezione relativa all'uso del principal delle risorse per accedere alle risorse di Oracle Cloud Infrastructure.

    Questa operazione memorizza le credenziali nel database in formato cifrato. È possibile utilizzare qualsiasi nome per il nome della credenziale. Tenere presente che questo passo è necessario una sola volta a meno che le credenziali dell'area di memorizzazione degli oggetti non vengano modificate. Dopo aver memorizzato le credenziali, è possibile utilizzare lo stesso nome di credenziale per creare tabelle esterne.

    Vedere CREATE_CREDENTIAL Procedura per informazioni sui parametri username e password per diversi servizi di storage degli oggetti.

  2. Creare una tabella esterna nella parte superiore dei file di origine utilizzando la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    La procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE supporta i file esterni nei servizi di storage degli oggetti cloud supportati. La credenziale è una proprietà a livello di tabella, pertanto i file esterni devono trovarsi nella stessa area di memorizzazione degli oggetti.

    Ad esempio:

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'CHANNELS_EXT',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/channels.txt',
        format => json_object('delimiter' value ','),
        column_list => 'CHANNEL_ID VARCHAR2(2), CHANNEL_DESC VARCHAR2(20), CHANNEL_CLASS VARCHAR2(20)' );
    END;
    /
    

    Di seguito sono riportati i parametri.

    In questo esempio, namespace-string è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Nota

    Autonomous Database supporta una vasta gamma di formati di file di origine, inclusi i formati di dati compressi. Per visualizzare i tipi di compressione supportati, vedere DBMS_CLOUD Package Format Options e l'opzione DBMS_CLOUD compression format.

    È ora possibile eseguire query sulla tabella esterna creata nel passo precedente. Ad esempio:

    SELECT count(*) FROM channels_ext;

    Per impostazione predefinita, il database prevede che tutte le righe del file di dati esterno siano valide e corrispondano sia alle definizioni del tipo di dati di destinazione che alla definizione del formato dei file. Se nei file di origine sono presenti righe che non corrispondono alle opzioni di formato specificate, la query segnala un errore. Per eliminare questi errori, è possibile utilizzare i parametri DBMS_CLOUD, ad esempio rejectlimit. In alternativa, è inoltre possibile convalidare la tabella esterna creata per visualizzare i messaggi di errore e le righe rifiutate in modo da poter modificare le opzioni di formato di conseguenza. Per ulteriori informazioni, vedere Convalida dati esterni.

    Per informazioni dettagliate sui parametri, vedere CREATE_EXTERNAL_TABLE Procedura.

    Per ulteriori informazioni sui servizi di storage degli oggetti cloud supportati, vedere DBMS_CLOUD Formati URI.

Colonne metadati tabella esterna

I metadati della tabella esterna consentono di determinare da dove provengono i dati quando si esegue una query.

Le tabelle esterne create con DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE o DBMS_CLOUD.CREATE_HYBRID_PART_TABLE includono due colonne invisibili file$path e file$name. Queste colonne consentono di identificare il file da cui proviene un record.

  • file$path: specifica il testo del percorso del file fino all'inizio del nome dell'oggetto.

  • file$name: specifica il nome dell'oggetto, incluso tutto il testo che segue l'ultimo "/".

Ad esempio:

SELECT genre_id, name, file$name, file$path FROM ext_genre
     WHERE rownum <= 2;

genre_id      name        file$name     file$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

Per ulteriori informazioni sulle colonne invisibili, vedere Colonne invisibili.