DBMS_CLOUD Supporto per Avro, ORC e Parquet
In questa sezione viene descritto il supporto DBMS_CLOUD
Avro, ORC e Parquet fornito con Autonomous Database.
DBMS_CLOUD Opzioni formato package per Avro, ORC o Parquet
L'argomento del formato in DBMS_CLOUD
specifica il formato dei file di origine.
Di seguito sono riportati i due modi per specificare l'argomento del formato.
format => '{"format_option" : “format_value” }'
E:
format => json_object('format_option' value 'format_value'))
Esempi:
format => json_object('type' VALUE 'CSV')
Per specificare più opzioni di formato, separare i valori con un ",
".
Ad esempio:
format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
Opzione di formato | Descrizione | Sintassi |
---|---|---|
|
Quando il valore di I caratteri "*" e "?" vengono considerati caratteri jolly quando il parametro I pattern di espressioni regolari sono supportati solo per il nome file o il percorso della sottocartella negli URI e la corrispondenza del pattern è identica a quella eseguita dalla funzione Per le tabelle esterne, questa opzione è supportata solo con le tabelle create su un file nello storage degli oggetti. Ad esempio:
Per ulteriori informazioni sulla condizione |
Valore predefinito: |
type |
Specifica il tipo di file. |
|
|
Quando lo schema è impostato su I nomi delle colonne corrispondono a quelli trovati in Avro, ORC o Parquet. I tipi di dati vengono convertiti da tipi di dati Avro, ORC o Parquet a tipi di dati Oracle. Tutte le colonne vengono aggiunte alla tabella. Il valore Il valore Predefinito: se si specifica Nota: per i file in formato Avro, ORC o Parquet l'opzione di formato |
|
DBMS_CLOUD Package Avro - Mapping tipo dati Oracle
Descrive il mapping dei tipi di dati Avro ai tipi di dati Oracle.
Nota
I tipi complessi, quali mappe, array e strutture, sono supportati a partire da Oracle Database 19c. Per informazioni sull'utilizzo dei tipi complessi Avro, vedere DBMS_CLOUD Tipi di package Avro, ORC e Parquet Complex.Tipo Avro | Tipo specifico Oracle |
---|---|
INT | NUMBER(10) |
LONG | NUMERO (19) |
SCATOLA | NUMERO (1) |
UTF8 BYTE_ARRAY | RAW(2000) |
FLT | BINARY_FLOAT |
DBL | BINARY_DOUBLE |
DECIMALE(p) | NUMERO(p) |
DECIMALE(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2 |
TIME_MILLIS | VARCHAR2(20 BYTE) |
TIME_MICROS | VARCHAR2(20 BYTE) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
ENUM | VARCHAR2(n) Dove: "n" rappresenta la lunghezza massima effettiva dei valori possibili di AVRO ENUM. |
DURATION | RAW(2000) |
FISSO | RAW(2000) |
NULL | VARCHAR2(1) BYTE |
Per informazioni sull'utilizzo dei tipi complessi Avro, vedere DBMS_CLOUD Tipi di package Avro, ORC e Parquet Complex.
DBMS_CLOUD Package ORC - Mapping tipo dati Oracle
Descrive il mapping dei tipi di dati ORC ai tipi di dati Oracle.
Per informazioni sull'utilizzo dei tipi complessi ORC, vedere DBMS_CLOUD Package Avro, ORC e Parquet Complex Types.
Tipo ORC | Tipo specifico Oracle | Ulteriori informazioni |
---|---|---|
array | VARCHAR2(n) Formato JSON | DBMS_CLOUD Tipi complessi di pacchetti Avro, ORC e Parquet |
bigint (64 bit) | NUMERO (19) | |
binario | BLOB | |
booleano (1 bit) | NUMERO (1) | |
char | CARICA(n) | |
data | DATE | |
double | BINARY_DOUBLE | |
float | BINARY_FLOAT | |
int (32 bit) | NUMBER(10) | |
list | VARCHAR2(n) Formato JSON | DBMS_CLOUD Tipi complessi di pacchetti Avro, ORC e Parquet |
mappa | VARCHAR2(n) Formato JSON | DBMS_CLOUD Tipi complessi di pacchetti Avro, ORC e Parquet |
smallint (16 bit) | NUMERO (5) | |
stringa | VARCHAR2(4000) | |
struct | VARCHAR2(n) Formato JSON | DBMS_CLOUD Tipi complessi di pacchetti Avro, ORC e Parquet |
Indicatore orario | TIMESTAMP | |
minuscolo (8 bit) | NUMERO (3) | |
union | VARCHAR2(n) Formato JSON | DBMS_CLOUD Tipi complessi di pacchetti Avro, ORC e Parquet |
varchar | VARCHAR2(n) |
Mapping tra pacchetti DBMS_CLOUD e tipi di dati Oracle
Descrive il mapping dei tipi di dati Parquet ai tipi di dati Oracle.
Nota
I tipi complessi, quali mappe, array e strutture, sono supportati a partire da Oracle Database 19c. Per informazioni sull'utilizzo dei tipi complessi Parquet, vedere DBMS_CLOUD Tipi di package Avro, ORC e Parquet Complex.Tipo di parquet | Tipo specifico Oracle |
---|---|
UINT_64 | NUMERO (20) |
INT_64 | NUMERO (19) |
UINT_32 | NUMBER(10) |
INT_32 | NUMBER(10) |
UINT_16 | NUMERO (5) |
INT_16 | NUMERO (5) |
UINT_8 | NUMERO (3) |
INT_8 | NUMERO (3) |
SCATOLA | NUMERO (1) |
UTF8 BYTE_ARRAY | VARCHAR2(4000 BYTE) |
FLT | BINARY_FLOAT |
DBL | BINARY_DOUBLE |
DECIMALE(p) | NUMERO(p) |
DECIMALE(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2(4000) |
TIME_MILLIS | VARCHAR2(20 BYTE) |
TIME_MILLIS_UTC | VARCHAR2(20 BYTE) |
TIME_MICROS | VARCHAR2(20 BYTE) |
TIME_MICROS_UTC | VARCHAR2(20 BYTE) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MILLIS_UTC | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
TIMESTAMP_MICROS_UTC | TIMESTAMP(6) |
TIMESTAMP_NANOS | TIMESTAMP(9) |
Per informazioni sull'utilizzo dei tipi complessi Parquet, vedere DBMS_CLOUD Tipi di package Avro, ORC e Parquet Complex.
DBMS_CLOUD Package di mapping tra tipo di dati Oracle e parquet
Descrive il mapping dei tipi di dati Oracle ai tipi di dati Parquet.
Tipo specifico Oracle | Tipo di parquet |
---|---|
BINARY_DOUBLE | DBL |
BINARY_FLOAT | FLT |
DATE | DATE |
NUMBER(p,s) | DECIMALE(p,s) |
NUMERO(p) | DECIMALE(p) |
TIMESTAMP(3) | TIMESTAMP_MILLIS |
TIMESTAMP(3) | TIMESTAMP_MILLIS_UTC |
TIMESTAMP(6) | TIMESTAMP_MICROS |
TIMESTAMP(6) | TIMESTAMP_MICROS_UTC |
TIMESTAMP(9) | TIMESTAMP_NANOS |
VARCHAR2(4000) | STRING |
Parametri sessione NLS
I parametri della sessione NLS NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
, NLS_TIMESTAMP_TZ_FORMAT
e NLS_NUMERIC_CHARACTERS
definiscono il modo in cui la data, l'indicatore orario, l'indicatore orario con il formato del fuso orario e il separatore del raggio per l'indicatore orario con l'indicatore decimale devono essere visualizzati quando viene eseguita una query su una tabella con tali tipi di colonna.
Inoltre, quando si esportano i dati utilizzando DBMS_CLOUD.EXPORT_DATA
e si specifica l'output Parquet, Autonomous Database legge i valori di questi parametri dalla tabella NLS_SESSION_PARAMETERS
. Autonomous Database utilizza questi valori per convertire i tipi di dati Oracle DATE
o TIMESTAMP
in tipi Parquet.
I parametri NLS_SESSION_PARAMETERS
supportano una maschera di formato RR
(specifica di due anni di caratteri).
La maschera di formato RR
per l'anno non è supportata per questi parametri quando si esportano dati in Parquet con DBMS_CLOUD.EXPORT_DATA
. Se si tenta di eseguire l'esportazione in parquet e NLS_SESSION_PARAMETERS
è impostato per utilizzare la maschera di formato RR
, viene generato un errore dell'applicazione. Il valore predefinito per il formato RR
dipende dal valore del parametro NLS_TERRITORY
.
Quando uno dei parametri NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
o NLS_TIMESTAMP_TZ_FORMAT
utilizza la maschera di formato RR
, è necessario modificare il valore del formato in valore supportato per esportare i dati in Parquet con DBMS_CLOUD.EXPORT_DATA
. Ad esempio:
ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY";
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM';
NLS_SESSION_PARAMETERS
.SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');
Se è impostato NLS_DATE_FORMAT
, si applica alle colonne con tipo di dati DATE
. Se è impostato NLS_TIMESTAMP_FORMAT
, si applica alle colonne con il tipo di dati TIMESTAMP
. Se è impostato NLS_TIMESTAMP_TZ_FORMAT
, si applica alle colonne con tipo di dati TIMESTAMP WITH TIME ZONE
.
Per ulteriori informazioni, vedere Parametri di data e ora in Oracle Database 19c Database Globalization Support Guide o Oracle Database 23ai Database Globalization Support Guide e NLS Data Dictionary Views nel manuale Oracle Database 19c Database Globalization Support Guide o Oracle Database 23ai Database Globalization Support Guide.
DBMS_CLOUD Tipi complessi di package Avro, ORC e Parquet
Descrive il mapping dei tipi di dati complessi Avro, ORC e Parquet ai tipi di dati Oracle.
Autonomous Database supporta tipi di dati complessi, inclusi i seguenti tipi complessi:
-
struct
-
list
-
mappa
-
union
-
array
Quando si specifica un tipo di file di origine Avro, ORC o Parquet e il file di origine include colonne complesse, le query di Autonomous Database restituiscono JSON per le colonne complesse. Ciò semplifica l'elaborazione dei risultati delle query; puoi utilizzare le potenti funzioni di analisi JSON di Oracle in modo coerente tra i tipi di file e i tipi di dati. La tabella riportata di seguito mostra il formato per i tipi complessi in Autonomous Database.
Nota
I campi complessi vengono mappati alle colonneVARCHAR2
e vengono applicati i limiti di dimensione VARCHAR2
.
Type | Parquet | ORC | Avro | Oracle |
---|---|---|---|---|
Lista: sequenza di valori | List | List | Array | VARCHAR2 (formato JSON)
|
Mappa: lista di oggetti con chiave singola | Mappa | Mappa | Mappa | VARCHAR2 (formato JSON)
|
Unione: valori di tipo diverso | Non disponibile | UNION | UNION | VARCHAR2 (formato JSON)
|
Oggetto: zero o più coppie chiave-valore | Struttura | Struttura | Record | VARCHAR2 (formato JSON)
|
Se i file di origine ORC, Parquet o Avro contengono tipi complessi, è possibile eseguire una query sull'output JSON per questi tipi complessi comuni. Ad esempio, quanto segue mostra un file ORC, movie-info.orc
, con un tipo complesso (lo stesso tipo complesso di gestione si applica per i file di origine Parquet e Avro).
Si consideri il file movie-info.orc
con lo schema seguente:
id int
original_title string
overview string
poster_path string
release_date string
vote_count int
runtime int
popularity double
genres array<struct<id:int,name:string>
Si noti che ogni filmato viene classificato da più genres
utilizzando un array di genres
. L'array genres
è un valore array
di structs
e ogni elemento ha un valore id
(int
) e un valore name
(string
). L'array genres
è considerato un tipo complesso. È possibile creare una tabella su questo file ORC utilizzando DBMS_CLOUD.CREATE_EXTERNAL_TABLE
come indicato di seguito.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
(
table_name =>'movie_info',
credential_name =>'OBJ_STORE_CRED',
file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc',
format => '{"type":"orc", "schema": "first"}');
END;
/
Quando si crea la tabella esterna, il database genera automaticamente le colonne in base allo schema nel file ORC (se si utilizza Avro o Parquet, si applica lo stesso). In questo esempio, DBMS_CLOUD.CREATE_EXTERNAL_TABLE
crea una tabella nel database come indicato di seguito.
CREATE TABLE "ADMIN"."MOVIE_INFO"
( "ID"
NUMBER(10,0),
"ORIGINAL_TITLE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"OVERVIEW" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"POSTER_PATH" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"RELEASE_DATE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"VOTE_COUNT" NUMBER(10,0),
"RUNTIME" NUMBER(10,0),
"POPULARITY" BINARY_DOUBLE,
"GENRES" VARCHAR2(4000 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.credential.name=OBJ_STORE_CRED
com.oracle.bigdata.fileformat=ORC
)
LOCATION
(
'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc'
)
)
REJECT LIMIT UNLIMITED
PARALLEL;
)
Ora è possibile eseguire una query sui dati del filmato:
SELECT original_title, release_date, genres
FROM movie_info
WHERE release_date > '2000'
ORDER BY original_title;
Viene prodotto l'output seguente:
original_title release_date genres
(500) Days of Summer 2009 [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":19,"name":"Western"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 [{"id":6,"name":"Comedy"}]
11:14 2003 [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
1408 2007 [{"id":45,"name":"Sci-Fi"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":6,"name":"Comedy"},{"id":18,"name":"War"}]
Si noti che il tipo complesso genres
viene restituito come array JSON.
Per rendere più utili i dati JSON, è possibile trasformare la colonna utilizzando le funzioni JSON di Oracle. Ad esempio, è possibile utilizzare la notazione "." JSON e le funzioni di trasformazione più potenti come JSON_TABLE
.
Per informazioni sulla notazione ".", vedere Simple Dot-Notation Access to JSON Data in Oracle Database 19c JSON Developer's Guide o Oracle Database 23ai JSON Developer's Guide.
Per informazioni su JSON_TABLE
, vedere Funzione SQL/JSON JSON_TABLE in Oracle Database 19c JSON Developer's Guide o Oracle Database 23ai JSON Developer's Guide.
SELECT original_title, release_date, m.genre_name, genres
FROM movie_info mi,
JSON_TABLE(mi.genres, '$.name[*]'
COLUMNS (genre_name VARCHAR2(25) PATH
'$')
) AS m
WHERE rownum < 10;
Il valore JSON_TABLE
crea una riga per ogni valore dell'array, pensa all'outer join e la struttura viene analizzata per estrarre il nome del genere. Viene prodotto l'output seguente:
original_title release_date genre_name genres
(500) Days of Summer 2009 Drama [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Comedy [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Horror [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Western [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 War [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Romance [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 Comedy [{"id":6,"name":"Comedy"}]
11:14 2003 Family [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
11:14 2003 Thriller [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
127 Hours 2010 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 Romance [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 War [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
DBMS_CLOUD Mapping tra package Avro, ORC e parquet e nome colonna Oracle
Descrive le regole per la conversione dei nomi di colonna Avro, ORC e Parquet in nomi di colonna Oracle.
Sono supportati i nomi di colonna Avro, ORC e Parquet, ma potrebbero essere necessarie virgolette doppie per i riferimenti a Oracle SQL in tabelle esterne. Pertanto, per facilitare l'utilizzo e per evitare di dover utilizzare le virgolette doppie quando si fa riferimento ai nomi di colonna, se possibile non utilizzare quanto segue nei nomi di colonna Avro, ORC e Parquet:
-
Spazi vuoti incorporati
-
Numeri principali
-
Primi caratteri di sottolineatura
-
Parole riservate di Oracle SQL
La tabella seguente mostra vari tipi di nomi di colonna Avro, ORC e Parquet e regole per l'utilizzo dei nomi di colonna nei nomi di colonna Oracle nelle tabelle esterne.
Nome Avro, ORC o parquet | CREA nome tabella | CATALOGO Oracle | SQL valido | Note |
---|---|---|---|---|
parte, parte o parte | parte, parte, parte | PARTE |
|
Nomi di colonne senza virgolette in maiuscolo Oracle implicitamente |
N. ordine | "N. ordine" | N. ordine | select "Ord No" |
Le virgolette doppie sono obbligatorie quando sono presenti spazi vuoti incorporati, che conservano anche il caso del carattere |
__index_key__ | "__index_key__" | __index_key__ | select "__index_key__" |
Le virgolette doppie sono obbligatorie quando è presente un carattere di sottolineatura iniziale, che conserva anche il caso del carattere |
6Way | "6Way" | 6Way | select "6Way" |
Le virgolette sono obbligatorie quando è presente una cifra numerica iniziale, che conserva anche il carattere maiuscolo/minuscolo |
creare, creare o creare e così via. (ogni variazione di caso) partizione, partizione, partizione e così via (per una parola riservata Oracle) | "CREA" "PARTIZIONE" | CREA PARTIZIONE |
|
Per le parole riservate di Oracle SQL sono necessarie virgolette doppie. Questi sono forzati a maiuscole, ma devono sempre essere racchiusi tra virgolette doppie quando vengono utilizzati in qualsiasi punto di SQL |
ID riga, ID riga, ROWid e così via (per ROWID vedere le note) | idriga |
|
Per ROWID, qualsiasi variazione mista o minuscola di ROWID conserva la custodia e deve essere sempre doppiamente citata e utilizzare le varianti originali della custodia. A causa del conflitto intrinseco con Oracle ROWID per la tabella, se si specifica il valore ROWID maiuscolo, viene automaticamente memorizzato come "ROWID" minuscolo e deve essere sempre racchiuso tra virgolette quando viene fatto riferimento. |
Note
-
In generale, è possibile fare riferimento a un nome di colonna in una tabella esterna senza virgolette doppie.
-
A meno che non sia presente un carattere vuoto incorporato, un carattere di sottolineatura iniziale ("_") o una cifra numerica iniziale ("da 0" a "9") nel nome della colonna, il caso originale del nome della colonna viene conservato e deve sempre essere fatto riferimento con le virgolette doppie e utilizzando il caso originale (maiuscolo, minuscolo o misto) del nome della colonna Avro, ORC o Parquet.
-
Dopo aver utilizzato
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare una tabella esterna con il formato specificato comeavro
,orc
oparquet
, utilizzare il comandoDESCRIBE
in SQL*Plus per visualizzare i nomi delle colonne della tabella. -
Quando si utilizzano parole riservate Oracle SQL nei nomi di colonna Avro, ORC o Parquet, è necessario che vengano sempre citate due volte quando vi viene fatto riferimento in qualsiasi punto di SQL. Per ulteriori informazioni, vedere Parole riservate di Oracle SQL in Oracle Database 23ai SQL Language Reference o Oracle Database 23ai SQL Language Reference.