Esegui query su dati esterni partizionati con organizzazione file di origine formato cartella

Utilizzare DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE per creare una tabella partizionata esterna e generare le informazioni di partizionamento dal percorso del file dell'area di memorizzazione degli oggetti cloud.

Quando si crea una tabella esterna con file di dati in formato cartella, sono disponibili due opzioni per specificare i tipi di colonne di partizione:

  • È possibile specificare manualmente le colonne e i relativi tipi di dati con il parametro column_list. Per un esempio utilizzando il parametro column_list, vedere Query External Partitioned Data with Hive Format Source File Organization.

  • È possibile consentire a DBMS_CLOUD di derivare le colonne dei file di dati e i relativi tipi dalle informazioni contenute nei file di dati strutturati, ad esempio i file di dati Avro, ORC e Parquet. In questo caso, utilizzare l'opzione partition_columns con il parametro format per fornire i nomi delle colonne e i relativi tipi di dati per le colonne delle partizioni e non è necessario fornire i parametri column_list o field_list.

Considera i seguenti file di origine di esempio nell'area di memorizzazione degli oggetti:

.../sales/USA/2020/01/sales1.parquet

.../sales/USA/2020/02/sales2.parquet

Per creare una tabella esterna partizionata con il percorso del file dell'area di memorizzazione degli oggetti cloud che definisce le partizioni dai file con questo formato di cartella di esempio, effettuare le operazioni riportate di seguito.

  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 partizionata esterna nella parte superiore dei file di origine utilizzando la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.

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

    Ad esempio:

    BEGIN DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
        table_name => 'MYSALES',
        credential_name => 'DEF_CRED_NAME',
        file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales/*.parquet',
        format =>
            json_object('type' value 'parquet', 'schema' value 'first',
                        'partition_columns' value
                              json_array(
                                    json_object('name' value 'country', 'type' value 'varchar2(100)'),
                                    json_object('name' value 'year', 'type' value 'number'),
                                    json_object('name' value 'month', 'type' value 'varchar2(2)')
                              )
             )
        );
    END;
    /

    I parametri DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE per i file di dati strutturati, ad esempio per un file di dati Parquet, non richiedono i parametri column_list o field_list. I nomi di colonna e i tipi di dati vengono derivati per le colonne dal primo file di parquet che la procedura esegue la scansione (e quindi tutti i file devono avere la stessa forma). L'elenco di colonne generato include le colonne derivate dal nome dell'oggetto e queste colonne hanno i tipi di dati specificati con il parametro partition_columns format.

    Di seguito sono riportati i parametri.

    • table_name: è il nome della tabella esterna.

    • credential_name: è il nome della credenziale creata nel passo precedente.

    • file_uri_list: è una lista delimitata da virgole di URI file di origine. Per questo elenco sono disponibili due opzioni:

      • Specificare una lista delimitata da virgole di singoli URI file senza caratteri jolly.

      • Specificare un singolo URI file con caratteri jolly, in cui i caratteri jolly possono essere solo dopo l'ultima barra "/". Il carattere "*" può essere utilizzato come carattere jolly per più caratteri, il carattere "?" può essere utilizzato come carattere jolly per un singolo carattere.

    • column_list: è una lista delimitata da virgole di nomi di colonna e tipi di dati per la tabella esterna. L'elenco include le colonne che si trovano all'interno del file e quelle derivate dal nome dell'oggetto.

      column_list non è necessario quando i file di dati sono file strutturati (Parquet, Avro o ORC).

    • field_list: identifica i campi nei file di origine e i relativi tipi di dati. Il valore predefinito è NULL, ovvero i campi e i relativi tipi di dati sono determinati dal parametro column_list.

      field_list non è necessario quando i file di dati sono file strutturati (Parquet, Avro o ORC).

    • format: definisce le opzioni che è possibile specificare per descrivere il formato del file di origine. Il parametro partition_columns format specifica i nomi delle colonne della partizione. Per ulteriori informazioni, vedere DBMS_CLOUD Opzioni formato pacchetto.

      Se i dati nel file di origine sono cifrati, decifrare i dati specificando l'opzione di formato encryption. Per ulteriori informazioni sulla decifrazione dei dati, vedere Decifra dati durante l'importazione dallo storage degli oggetti.

    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.

    Per informazioni dettagliate sui parametri, vedere CREATE_EXTERNAL_PART_TABLE Procedura.

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

    Se nei file di origine sono presenti righe che non corrispondono alle opzioni di formato specificate, la query segnala un errore. È possibile utilizzare i parametri DBMS_CLOUD, ad esempio rejectlimit, per eliminare questi errori. In alternativa, è anche possibile convalidare la tabella partizionata 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 e Convalida dati partizionati esterni.

  3. È ora possibile eseguire le query nella tabella partizionata esterna creata nel passo precedente.

    Autonomous Database sfrutta le informazioni di partizionamento della tabella partizionata esterna, assicurandosi che la query acceda solo ai file di dati pertinenti nell'area di memorizzazione degli oggetti. Ad esempio, la query seguente legge solo i file di dati da una partizione.

    Ad esempio:

    SELECT year, month, product, units 
    FROM SALES WHERE year='2020' AND month='02' AND country='USA'

    Le tabelle partizionate esterne create con DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE includono due colonne invisibili file$path e file$name. Queste colonne consentono di identificare il file da cui proviene un record. Per ulteriori informazioni, vedere Colonne metadati tabella esterna.