Supporto DBMS_CLOUD Avro, ORC e Parquet
Questa sezione descrive il supporto di DBMS_CLOUD Avro, ORC e Parquet fornito con Autonomous AI Database.
Opzioni formato pacchetto DBMS_CLOUD 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" }'
and
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 ",".
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 |
|---|---|---|
regexuri |
Quando il valore di I caratteri "*" e "?" sono considerati caratteri jolly quando il parametro I pattern di espressione regolari sono supportati solo per il nome file o il percorso della sottocartella negli URI e la corrispondenza dei pattern è identica a quella eseguita dalla funzione Per le tabelle esterne, questa opzione è supportata solo con le tabelle create in un file nello storage degli oggetti. Ad esempio:
Per ulteriori informazioni sulla condizione |
Valore predefinito: |
type |
Specifica il tipo di file. |
|
schema |
Quando lo schema è impostato su I nomi delle colonne corrispondono a quelli trovati in Avro, ORC o Parquet. I tipi di dati vengono convertiti dai tipi di dati Avro, ORC o Parquet ai tipi di dati Oracle. Tutte le colonne vengono aggiunte alla tabella. Il valore Il valore Impostazione predefinita: se si specifica Nota: per i file in formato Avro, ORC o Parquet, l'opzione di formato |
|
Mapping tra media e tipo di dati Oracle del package DBMS_CLOUD
Descrive il mapping dei tipi di dati Avro ai tipi di dati Oracle.
Nota: tipi complessi, ad esempio mappe, array e strutture, sono supportati a partire da Oracle Database 19c. Per informazioni sull'uso dei tipi complessi Avro, ORC e Parquet, vedere DBMS_CLOUD Package Avro, ORC e Parquet.
| Tipo medio | Tipo specifico Oracle |
|---|---|
| INT | NUMBER(10) |
| LONG | NUMERO(19) |
| BOOL | NUMERO(1) |
| BYTE_ARRAY UTF8 | RAW(2000) |
| FLT | BINARY_FLOAT |
| DBL | BINARY_DOUBLE |
| DECIMALE(p) | NUMERO(p) |
| DECIMAL(p,s) | NUMERO(p,s) |
| DATE | DATE |
| STRING | VARCHAR2 |
| MULINO A TEMPO | VARCHAR2(20 BYTE) |
| TIME_MICROS | VARCHAR2(20 BYTE) |
| TIMESTAMP_MILIS | TIMESTAMP(3) |
| TIMESTAMP_MICROS | TIMESTAMP(6) |
| ENUM | VARCHAR2(n) Dove: "n" è la lunghezza massima effettiva dei valori possibili di AVRO ENUM |
| DURATION | RAW(2000) |
| FISSO | RAW(2000) |
| NULL | VARCHAR2(1) BYTE |
Per informazioni sull'uso dei tipi complessi Avro, ORC e Parquet, vedere DBMS_CLOUD Package Avro, ORC e Parquet.
Mapping tra package ORC e tipo dati Oracle DBMS_CLOUD
Descrive il mapping dei tipi di dati ORC ai tipi di dati Oracle.
Per informazioni sull'uso dei tipi complessi ORC, vedere DBMS_CLOUD Package Avro, ORC e Parquet.
| Tipo ORC | Tipo specifico Oracle | Ulteriori informazioni |
|---|---|---|
| array | Formato JSON VARCHAR2(n) | DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet |
| bigint (64 bit) | NUMERO(19) | |
| binario | BLOB | |
| booleano (1 bit) | NUMERO(1) | |
| char | CHAR(n) | |
| data | DATE | |
| double | BINARY_DOUBLE | |
| float | BINARY_FLOAT | |
| int (32 bit) | NUMBER(10) | |
| list | Formato JSON VARCHAR2(n) | DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet |
| mappa | Formato JSON VARCHAR2(n) | DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet |
| smallint (16 bit) | NUMERO(5) | |
| stringa | VARCHAR2(4000) | |
| struct | Formato JSON VARCHAR2(n) | DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet |
| indicatore orario | TIMESTAMP | |
| tinyint (8 bit) | NUMERO(3) | |
| union | Formato JSON VARCHAR2(n) | DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet |
| varchar | VARCHAR2(n) |
Mapping tra Parquet package DBMS_CLOUD e tipo di dati Oracle
Descrive il mapping dei tipi di dati Parquet ai tipi di dati Oracle.
Nota: tipi complessi, ad esempio mappe, array e strutture, sono supportati a partire da Oracle Database 19c. Per informazioni sull'uso dei tipi complessi Parquet, vedere DBMS_CLOUD Package Avro, ORC e Parquet.
| Tipo di parquet | Tipo specifico Oracle |
|---|---|
| SUGGERIMENTO_64 | NUMERO (20) |
| INT_64 | NUMERO(19) |
| SUGGERIMENTO_32 | NUMBER(10) |
| INT_32 | NUMBER(10) |
| UINT_16 | NUMERO(5) |
| INT_16 | NUMERO(5) |
| UINT_8 | NUMERO(3) |
| INT_8 | NUMERO(3) |
| BOOL | NUMERO(1) |
| BYTE_ARRAY UTF8 | VARCHAR2(4000 BYTE) |
| FLT | BINARY_FLOAT |
| DBL | BINARY_DOUBLE |
| DECIMALE(p) | NUMERO(p) |
| DECIMAL(p,s) | NUMERO(p,s) |
| DATE | DATE |
| STRING | VARCHAR2(4000) |
| MULINO A TEMPO | VARCHAR2(20 BYTE) |
| TEMPO_MILLIS_UTC | VARCHAR2(20 BYTE) |
| TIME_MICROS | VARCHAR2(20 BYTE) |
| TIME_MICROS_UTC | VARCHAR2(20 BYTE) |
| TIMESTAMP_MILIS | TIMESTAMP(3) |
| TIMESTAMP_MILLIS_UTC | TIMESTAMP(3) |
| TIMESTAMP_MICROS | TIMESTAMP(6) |
| TIMESTAMP_MICROS_UTC | TIMESTAMP(6) |
| INDICATORE ORARIO - NANO | TIMESTAMP(9) |
Per informazioni sull'uso dei tipi complessi Parquet, vedere DBMS_CLOUD Package Avro, ORC e Parquet.
Mapping tra tipo di dati Oracle e parquet del package DBMS_CLOUD
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 |
| NUMERO(p,s) | DECIMAL(p,s) |
| NUMERO(p) | DECIMALE(p) |
| TIMESTAMP(3) | TIMESTAMP_MILIS |
| TIMESTAMP(3) | TIMESTAMP_MILLIS_UTC |
| TIMESTAMP(6) | TIMESTAMP_MICROS |
| TIMESTAMP(6) | TIMESTAMP_MICROS_UTC |
| TIMESTAMP(9) | INDICATORE ORARIO - NANO |
| VARCHAR2(4000) | STRING |
Parametri sessione NLS
I parametri di 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 radix per l'indicatore orario con 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 AI Database legge i valori di questi parametri dalla tabella NLS_SESSION_PARAMETERS. Autonomous AI 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 caratteri anno).
La maschera di formato RR per l'anno non è supportata per questi parametri quando si esportano i dati in Parquet con DBMS_CLOUD.EXPORT_DATA. Viene generato un errore dell'applicazione se si tenta di eseguire l'esportazione in parquet e NLS_SESSION_PARAMETERS viene impostato per utilizzare la maschera di formato RR (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 un 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';
Dopo aver modificato il valore, è possibile verificare la modifica eseguendo una query sulla vista NLS_SESSION_PARAMETERS:
SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');
Se NLS_DATE_FORMAT è impostato, viene applicato alle colonne con tipo di dati DATE. Se NLS_TIMESTAMP_FORMAT è impostato, viene applicato alle colonne con tipo di dati TIMESTAMP. Se NLS_TIMESTAMP_TZ_FORMAT è impostato, viene applicato alle colonne con tipo di dati TIMESTAMP WITH TIME ZONE.
Per ulteriori informazioni, vedere Date and Time Parameters in Oracle Database 19c Database Globalization Support Guide o Oracle Database 26ai Database Globalization Support Guide e NLS Data Dictionary Views in Oracle Database 19c Database Globalization Support Guide o Oracle Database 26ai Database Globalization Support Guide.
DBMS_CLOUD Package - Tipi complessi Avro, ORC e Parquet
Descrive il mapping dei tipi di dati complessi Avro, ORC e Parquet ai tipi di dati Oracle.
Autonomous AI Database supporta tipi di dati complessi, inclusi i tipi complessi riportati di seguito.
- 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 AI 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 seguente mostra il formato per i tipi complessi in Autonomous AI Database:
Nota: i campi complessi sono mappati alle colonne VARCHAR2 e ai limiti di dimensione VARCHAR2.
| Type | Parquet | ORC | Avro | Oracle |
|---|---|---|---|---|
| Elenco: sequenza di valori | List | List | Array | VARCHAR2 (formato JSON) |
| Mappa: elenco 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 | Strutt. | Strutt. | 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, di seguito viene mostrato un file ORC, movie-info.orc, con un tipo complesso (la stessa gestione del tipo complesso è valida 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 è classificato da più genres utilizzando un array di genres. L'array genres è un array di structs e ogni elemento ha un id (int) e un 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, lo stesso vale). 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 raffigurato di seguito:
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 i dati JSON più utili, puoi 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 26ai JSON Developer's Guide.
Per informazioni su JSON_TABLE, vedere SQL/JSON Function JSON_TABLE in Oracle Database 19c JSON Developer's Guide o Oracle Database 26ai JSON Developer's Guide.
L'esempio seguente mostra una query sulla tabella che prende ciascun valore dell'array e trasforma il valore in una riga del set di risultati:
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;
JSON_TABLE crea una riga per ogni valore dell'array, pensa outer join e la struttura viene analizzata per estrarre il nome del genere. Viene prodotto l'output raffigurato di seguito:
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"}]
Mapping tra package DBMS_CLOUD Avro, ORC e Parquet e nome colonna Oracle
Descrive le regole per la conversione dei nomi delle colonne Avro, ORC e Parquet in nomi di colonna Oracle.
Le opzioni riportate di seguito sono supportate per i nomi delle colonne Avro, ORC e Parquet, ma possono richiedere l'uso di virgolette doppie per i riferimenti Oracle SQL nelle tabelle esterne. Pertanto, per facilitare l'uso e per evitare di dover utilizzare virgolette doppie quando si fa riferimento ai nomi di colonna, se possibile, non utilizzare quanto segue nei nomi di colonna Avro, ORC e Parquet:
- Svuoti incorporati
- Numeri iniziali
- Punti di sottolineatura principali
- Parole riservate Oracle SQL
La tabella riportata di seguito mostra i vari tipi di nomi di colonna Avro, ORC e Parquet e le regole per l'utilizzo dei nomi di colonna nei nomi di colonna Oracle nelle tabelle esterne.
| Nome Avro, ORC o Parquet | CREATE TABLE Name | CATALOGO Oracle | SQL valido | Note |
|---|---|---|---|---|
| parte, parte o parte | parte, parte, parte | PARTE |
|
Oracle applica in modo implicito le maiuscole ai nomi delle colonne senza virgolette. |
| N. ordine | "N. ordine" | N. ordine | select "Ord No" |
Le virgolette doppie sono necessarie quando sono presenti spazi vuoti incorporati, che conserva anche la maiuscola del carattere. |
| __chiave_indice__ | "__index_key__" | __chiave_indice__ | select "__index_key__" |
Le virgolette doppie sono necessarie quando è presente un carattere di sottolineatura iniziale, che conserva anche il carattere maiuscolo. |
| 6Vie | "6 canali" | 6Modalità | select "6Way" |
Le virgolette doppie sono obbligatorie quando è presente una cifra numerica iniziale, che conserva anche la maiuscola. |
| creare, creare o CREARE e così via (qualsiasi variazione di caso) partizione, partizione, PARTIZIONE e così via (per una parola riservata Oracle) | "CREA" "PARTIZIONE" | CREA UNA PARTIZIONE |
|
Le virgolette doppie sono obbligatorie per le parole riservate di Oracle SQL. Questi sono forzati in maiuscolo, ma devono sempre essere racchiusi tra virgolette doppie quando vengono utilizzati in qualsiasi posizione in SQL. |
| ROWID, ROWID, ROWID e così via (per ROWID vedere le note) | idriga |
|
Per ROWID, qualsiasi variazione mista o minuscola di ROWID conserva la custodia e deve sempre essere racchiusa tra virgolette doppie e utilizzare le variazioni originali della custodia. A causa del conflitto intrinseco con Oracle ROWID per la tabella, se si specifica ROWID maiuscolo, viene memorizzato automaticamente 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 vi sia un 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 utilizzato come riferimento tra virgolette doppie e utilizzando il caso originale (maiuscolo, inferiore o misto) del nome della colonna Avro, ORC o Parquet.
-
Dopo aver utilizzato
DBMS_CLOUD.CREATE_EXTERNAL_TABLEper creare una tabella esterna con il formato specificato comeavro,orcoparquet, utilizzare il comandoDESCRIBEin SQL*Plus per visualizzare i nomi delle colonne della tabella. -
Quando Oracle SQL Reserved Words viene utilizzato nei nomi di colonna Avro, ORC o Parquet, deve sempre essere racchiuso tra virgolette doppie quando viene fatto riferimento in un punto qualsiasi di SQL. Per ulteriori informazioni, vedere Oracle SQL Reserved Words in Oracle Database 26ai SQL Language Reference o Oracle Database 26ai SQL Language Reference.