Informazioni sulle tabelle esterne con il partizionamento del file di origine

In Autonomous Database è possibile creare tabelle esterne partizionate da dati partizionati in stile Hive o da semplici dati partizionati in cartelle memorizzati nell'area di memorizzazione degli oggetti cloud.

Utilizzando il partizionamento del file di origine, invece di fornire una specifica di partizione completa, la procedura deriva le informazioni di partizionamento dal percorso del file per determinati modelli di file. Considerare, ad esempio le seguenti specifiche dei file di dati:

  • Stile Hive: ad esempio: sales/country=USA/year=2020/month=01/file1.csv

  • Stile semplice di partizionamento delle cartelle: ad esempio: sales/USA/2020/01/file1.parquet

L'utilizzo di uno di questi formati di partizionamento comuni semplifica notevolmente sia la creazione che la gestione di tabelle esterne partizionate. Inoltre, anche se le colonne di partizione potrebbero non essere visualizzate nel file di dati, è comunque possibile eseguirne la query utilizzando SQL. Il partizionamento dei dati migliora inoltre le prestazioni delle query, riducendo notevolmente la quantità di dati scansionati. In questo esempio, quando si eseguono query sui dati 'USA', la query può saltare la scansione dei file per altri paesi.

Formato Hive - Dati partizionati nell'area di memorizzazione degli oggetti cloud

Hive offre un formato di metadati standard per i motori di elaborazione dei Big Data. I dati partizionati nell'area di memorizzazione degli oggetti cloud generati in formato Hive sono rappresentati in formato folder/subfolder. Ad esempio, nell'area di memorizzazione degli oggetti cloud un file di dati in formato Hive viene memorizzato come indicato di seguito.

table/partition1=partition1_value/partition2=partition2_value/data_file.csv

I file salvati in formato partizionato Hive forniscono informazioni sulla partizione nel nome del percorso del file di dati. Il nome del percorso del file di dati include informazioni sul contenuto dell'oggetto, inclusi i nomi delle colonne della partizione e i valori delle colonne della partizione (il file di dati non include le colonne della partizione e i relativi valori associati).

Ad esempio, si consideri una tabella SALES partizionata esterna creata dai dati di formato Hive nell'area di memorizzazione degli oggetti cloud:

.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv

Le informazioni sulla partizione di formato Hive mostrano che i file di dati nell'area di memorizzazione degli oggetti cloud sono partizionati in base a country, year e month e che i valori per queste colonne di partizione sono specificati anche nel nome del percorso di formato Hive per ogni file di dati (il nome del percorso include i valori per le colonne partizionate: country, year e month).

I nomi di colonna nel percorso verranno utilizzati dall'API per semplificare la definizione della tabella.

Dati partizionati in formato cartella semplice nell'area di memorizzazione degli oggetti cloud

I dati partizionati nell'area di memorizzazione degli oggetti cloud generati in formato cartella sono rappresentati in un formato folder/subfolder, simile ai dati partizionati in formato Hive, ma le informazioni nel percorso mostrano i valori delle colonne e non includono i nomi delle colonne. Inoltre, con i dati partizionati in formato cartella, l'ordine di partizione specificato nel nome dell'oggetto è significativo e deve corrispondere all'ordine nelle colonne della tabella.

Ad esempio, nell'area di memorizzazione degli oggetti cloud un file di dati in formato cartella viene memorizzato come riportato di seguito.

table/partition1_value/partition2_value/*.parquet

Il percorso include entrambi i valori delle colonne della partizione, nell'ordine delle colonne della partizione e i file di dati. Autonomous Database consente di creare una tabella partizionata esterna dai dati del formato delle cartelle ed è possibile eseguire una query utilizzando le partizioni specificate.

I file salvati in formato di cartella partizionata forniscono i valori della colonna di partizione dati nel nome file. A differenza di Hive, i percorsi non includono il nome della colonna, pertanto è necessario fornire i nomi delle colonne. L'ordine delle colonne di partizione è importante e l'ordine nel nome file per i nomi di partizione di colonna deve corrispondere all'ordine nel parametro partition_columns.

Informazioni sull'esecuzione di query sui dati partizionati nell'area di memorizzazione degli oggetti cloud

Quando si esegue una query sui dati partizionati esterni in formato Hive, il motore di query comprende e utilizza le informazioni di partizionamento dal nome del percorso del file. Ad esempio, si consideri una tabella SALES partizionata esterna in cui il file di origine, sales/country=USA/year=2020/month=02/file3.csv nell'area di memorizzazione degli oggetti, include i seguenti dati di vendita:

tents, 291
canoes, 22
backpacks, 378

I valori country nel nome del percorso e i valori del periodo di tempo per month e year non sono specificati come colonne nel file di dati. I valori della colonna della partizione vengono specificati solo nel nome del percorso con i valori visualizzati: USA, 2020 e 02. Dopo aver creato una tabella partizionata esterna con questo file di dati, è possibile utilizzare le colonne della partizione e i relativi valori quando si esegue una query nella tabella partizionata esterna.

Ad esempio:

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

Il vantaggio della creazione di una tabella partizionata esterna con dati generati come dati partizionati in formato Hive è che il motore di query è ottimizzato per eseguire il partizionamento dei dati per selezionare la partizione corretta e la query seleziona solo i dati da una partizione e deve solo cercare un singolo file di dati. Pertanto, la query richiede solo una scansione del file file3.csv (/sales/country=USA/year=2020/month=02/file3.csv). Per grandi quantità di dati, tale eliminazione delle partizioni può fornire miglioramenti significativi alle prestazioni.

Utilizzando le tabelle esterne standard di Oracle Database, la colonna della partizione deve essere disponibile come colonna all'interno del file di dati per utilizzarla per query o definizioni di partizione. Senza la gestione speciale disponibile con le tabelle partizionate esterne in Autonomous Database, questo potrebbe essere un problema se si desidera utilizzare i dati memorizzati in formato Hive nell'area di memorizzazione degli oggetti cloud, in quanto sarebbe necessario rigenerare i file di dati per includere la partizione come colonna nel file di dati.

Informazioni sulla creazione di tabelle esterne partizionate

Quando si utilizzano dati non strutturati memorizzati in formato Hive nell'area di memorizzazione degli oggetti cloud e si crea una tabella partizionata esterna, le colonne e i relativi tipi non possono essere derivati dal file di origine. Pertanto, le colonne e i relativi tipi di dati devono essere specificati con il parametro column_list. Per creare le tabelle esterne partizionate, utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE per specificare le colonne della partizione e i relativi tipi come indicato di seguito.

  • La radice per l'elenco di file è specificata nel nome del percorso con il parametro file_uri_list. Ad esempio, http://.../sales/*

  • I nomi delle colonne e i tipi di dati vengono specificati con il parametro column_list.

  • L'opzione partition_columns nel parametro format specifica le colonne della partizione.

  • La DLL generata include le colonne specificate nel nome del percorso.

In questo esempio, quando viene creata la tabella esterna, le colonne country, year e month vengono aggiunte nel parametro column_list. La tabella esterna viene creata con le colonne country, year e month, che non si trovano nei file di dati, e le partizioni elenco vengono create abilitando l'eliminazione delle partizioni.

Quando si utilizzano dati strutturati, ad esempio file Parquet, Avro o ORC memorizzati in formato cartella nell'area di memorizzazione degli oggetti cloud, le colonne e i relativi tipi di dati sono noti e non è necessario specificare l'elenco di colonne come richiesto con i dati non strutturati. Per creare le tabelle esterne partizionate, utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE per specificare le colonne della partizione e i relativi tipi come indicato di seguito.

  • La radice per l'elenco di file è specificata nel nome del percorso con il parametro file_uri_list. Ad esempio, http://.../sales/*
  • Il parametro column_list non è obbligatorio per i file strutturati. Se non si specifica l'elenco di colonne, è necessario definire le colonne di partizione e i relativi tipi di dati quando si crea la tabella partizionata esterna. Utilizzare l'opzione partition_columns nel parametro format per specificare le colonne della partizione e i relativi tipi di dati.
  • La DLL generata include le colonne specificate nel nome del percorso.

Per esempi completi, vedere Query su dati partizionati esterni con organizzazione file di origine formato Hive e Query su dati partizionati esterni con organizzazione file di origine formato cartella.

Partizionamento esterno: file di origine CSV con cartelle di tipo Hive

Mostra come creare tabelle partizionate esterne con file di origine CSV memorizzati nell'area di memorizzazione degli oggetti cloud in cartelle di tipo Hive.

Lista file di origine:

.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv', 
   column_list       => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)', 
   field_list        => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
   format            => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Nota

Il valore partition_columns nel parametro format deve corrispondere ai nomi di colonna trovati nel percorso (ad esempio, la colonna country corrisponde a "country=…")

Partizionamento esterno: file di origine CSV con cartelle semplici

Mostra come creare tabelle partizionate esterne con file di origine CSV memorizzati nell'area di memorizzazione degli oggetti cloud in un semplice formato di cartella.

Lista file di origine:

.../sales/USA/2020/01/file1.csv
.../sales/USA/2020/01/file2.csv
.../sales/USA/2020/02/file3.csv
.../sales/USA/2020/03/file1.csv
.../sales/FRA/2020/03/file1.csv

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     =>  'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv', 
   column_list       => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)', 
   field_list        => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
   format            => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Nota

La chiamata API è la stessa dell'esempio precedente, ma l'ordine del valore partition_columns nel parametro format è significativo perché il nome della colonna non si trova nel percorso del file.

Partizionamento esterno: file di origine Parquet con cartelle di tipo Hive

Mostra come creare tabelle partizionate esterne con file di origine Parquet memorizzati nell'area di memorizzazione degli oggetti cloud in cartelle di tipo Hive.

Lista file di origine:

.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name            => 'mysales',
     credential_name     => 'mycredential', 
     file_uri_list       => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../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)')
            )
        )

);
Nota

Il parametro column_list non è stato specificato. Come mostrato, per ogni colonna di partizione specificare sia il nome che il tipo di dati nel parametro format partition_columns.

Partizionamento esterno: parquet con cartelle semplici

Mostra come creare tabelle partizionate esterne con file di origine Parquet memorizzati nell'area di memorizzazione degli oggetti cloud in un formato di cartella semplice.

Lista file di origine:

.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../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)')
            )
        )

);
Nota

Il parametro column_list non è stato specificato. È necessario includere sia il nome che il tipo di dati per le colonne della partizione. Inoltre, l'ordine della clausola di formato partition_columns è importante perché il nome della colonna non si trova nel percorso del file.