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 parametroformat
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'opzionepartition_columns
nel parametroformat
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. - 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. - 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. - 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.
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"]}');
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"]}');
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)')
)
)
);
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)')
)
)
);
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.