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

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.

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

custsales/month=2019-01/custsales-2019-01.csv

custsales/month=2019-02/custsales-2019-02.csv

custsales/month=2019-03/custsales-2019-03.csv

Con questa denominazione, i valori per month vengono acquisiti all'interno del nome dell'oggetto.

Per creare una tabella esterna partizionata con i dati memorizzati in questo formato Hive 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 => 'sales_sample',
            CREDENTIAL_NAME => 'DEF_CRED_NAME',
            FILE_URI_LIST => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet',
            FORMAT => '{"type":"parquet", "schema": "first","partition_columns":[{"name":"month","type":"varchar2(100)"}]}');
    END;
    /

    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. La lista include le colonne all'interno del file di dati e quelle derivate dal nome dell'oggetto (da nomi nel percorso del file).

      column_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.

      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.

      Per ulteriori informazioni, vedere DBMS_CLOUD Opzioni formato pacchetto.

    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.

    La chiamata DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE restituisce la seguente definizione di tabella:

    CREATE TABLE "ADMIN"."SALES_SAMPLE"
       ( "DAY_ID" TIMESTAMP (6),
          "GENRE_ID" NUMBER(19,0),
          "MOVIE_ID" NUMBER(19,0),
          "CUST_ID" NUMBER(19,0),
          "APP" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DEVICE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "OS" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "PAYMENT_METHOD" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "LIST_PRICE" BINARY_DOUBLE,
          "DISCOUNT_TYPE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DISCOUNT_PERCENT" BINARY_DOUBLE,
          "ACTUAL_PRICE" BINARY_DOUBLE,
          "MONTH" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP"
       ) DEFAULT COLLATION "USING_NLS_COMP"
       ORGANIZATION EXTERNAL
        ( TYPE ORACLE_BIGDATA
          DEFAULT DIRECTORY "DATA_PUMP_DIR"
          ACCESS PARAMETERS
          ( com.oracle.bigdata.fileformat=parquet
    com.oracle.bigdata.filename.columns=["month"]
    com.oracle.bigdata.file_uri_list="https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet"
    com.oracle.bigdata.credential.schema="ADMIN"
    com.oracle.bigdata.credential.name=CRED_OCI
    com.oracle.bigdata.trimspaces=notrim
      )
        )
       REJECT LIMIT 0
      PARTITION BY LIST ("MONTH")
     (PARTITION "P1" VALUES (('2019-01'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-01/*.parquet'
           ),
     PARTITION "P2" VALUES (('2019-02'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-02/*.parquet'
           ))
      PARALLEL ;

    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.

  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:

    SELECT movie_id, month FROM sales WHERE month='2019-02'

    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.

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, è 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.