DBMS_CLOUD Prise en charge d'Avro, ORC et Parquet
Cette section présente la prise en charge d'Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
fourni avec la base de données autonome.
Options de format de l'ensemble DBMS_CLOUD pour Avro, ORC ou Parquet
L'argument de format dans DBMS_CLOUD
spécifie le format des fichiers sources.
Les deux façons de spécifier l'argument de format sont les suivantes :
format => '{"format_option" : “format_value” }'
Et :
format => json_object('format_option' value 'format_value'))
Exemples :
format => json_object('type' VALUE 'CSV')
Pour spécifier plusieurs options de format, séparez les valeurs par une ",
".
Par exemple :
format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
Option de formatage | Description | Syntaxe |
---|---|---|
|
Lorsque la valeur de Les caractères "*" et "?" sont considérés comme des caractères génériques lorsque le paramètre Les modèles d'expression rationnelle ne sont pris en charge que pour le nom de fichier ou le chemin du sous-dossier dans vos URI et la correspondance de modèle est identique à celle effectuée par la fonction Pour les tables externes, cette option n'est prise en charge qu'avec les tables qui sont créées dans un fichier du stockage d'objets. Par exemple :
Voir Condition REGEXP_LIKE dans Informations de référence sur le langage SQL pour Oracle Database 19c ou Informations de référence sur le langage SQL pour Oracle Database 23ai pour plus d'informations sur la condition |
Valeur par défaut : |
type |
Indique le type de fichier. |
|
|
Lorsque la valeur de schema est Les noms de colonne correspondent à ceux figurant dans Avro, ORC ou Parquet. Les types de données sont convertis des types de données Avro, ORC ou Parquet en types de données Oracle. Toutes les colonnes sont ajoutées à la table. La valeur La valeur Par défaut : Si Note : Pour les fichiers au format Avro, ORC ou Parquet, l'option de format |
|
Mappage de types de données Avro et Oracle dans l'ensemble DBMS_CLOUD
Décrit le mappage des types de données Avro aux types de données Oracle.
Note :
Les types complexes, tels que les mappages, les tableaux et les structures, sont pris en charge à partir d'Oracle Database 19c. Pour plus d'informations sur l'utilisation des types complexes Avro, ORC et Parquet, voir DBMS_CLOUD dans l'ensemble.Type Avro | Type Oracle |
---|---|
INT | NOMBRE(10) |
LONG | NUMÉRO(19) |
BOÎTE | NUMÉRO(1) |
UTF8 BYTE_ARRAY | RAW(2000) |
FLT | BINARY_FLOAT |
Base de données | BINARY_DOUBLE |
DÉCIMAL(p) | NUMÉRO(p) |
DÉCIMAL(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2 |
TIME_MILLIS | VARCHAR2(20 OCTETS) |
TIME_MICROS | VARCHAR2(20 OCTETS) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
ENUM | VARCHAR2(n) Où : "n" est la longueur maximale réelle des valeurs possibles pour AVRO ENUM |
DURATION | RAW(2000) |
FIXED | RAW(2000) |
NULL | VARCHAR2(1) OCTETS |
Pour plus d'informations sur l'utilisation des types complexes Avro, ORC et Parquet, voir DBMS_CLOUD dans l'ensemble.
Mappage entre types de données ORC et Oracle dans l'ensemble DBMS_CLOUD
Décrit le mappage des types de données ORC aux types de données Oracle.
Pour plus d'informations sur l'utilisation des types complexes ORC, DBMS_CLOUD dans l'ensemble - Types complexes Avro, ORC et Parquet.
Type ORC | Type Oracle | Informations supplémentaires |
---|---|---|
tableau | VARCHAR2(n) format JSON | Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD |
bigint (64 bits) | NUMÉRO(19) | |
binary | BLOB | |
booléen (1 bit) | NUMÉRO(1) | |
char | CARTE(n) | |
date | DATE | |
double | BINARY_DOUBLE | |
float | BINARY_FLOAT | |
int (32 bits) | NOMBRE(10) | |
liste | VARCHAR2(n) format JSON | Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD |
map | VARCHAR2(n) format JSON | Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD |
smallint (16 bits) | NOMBRE(5) | |
chaîne | VARCHAR2(4000) | |
structure | VARCHAR2(n) format JSON | Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD |
timestamp | TIMESTAMP | |
tinyint (8 bits) | NOMBRE(3) | |
syndicat | VARCHAR2(n) format JSON | Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD |
varchar | VARCHAR2(n) |
Mappage entre types de données Parquet et Oracle dans l'ensemble DBMS_CLOUD
Décrit le mappage des types de données Parquet aux types de données Oracle.
Note :
Les types complexes, tels que les mappages, les tableaux et les structures, sont pris en charge à partir d'Oracle Database 19c. Pour plus d'informations sur l'utilisation des types complexes Parquet, voir DBMS_CLOUD Types complexes Avro, ORC et Parquet dans l'ensemble.Type Parquet | Type Oracle |
---|---|
UINT_64 | NOMBRE(20) |
INT_64 | NUMÉRO(19) |
UINT_32 | NOMBRE(10) |
INT_32 | NOMBRE(10) |
UINT_16 | NOMBRE(5) |
INT_16 | NOMBRE(5) |
UINT_8 | NOMBRE(3) |
INT_8 | NOMBRE(3) |
BOÎTE | NUMÉRO(1) |
UTF8 BYTE_ARRAY | VARCHAR2(4000 OCTETS) |
FLT | BINARY_FLOAT |
Base de données | BINARY_DOUBLE |
DÉCIMAL(p) | NUMÉRO(p) |
DÉCIMAL(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2(4000) |
TIME_MILLIS | VARCHAR2(20 OCTETS) |
TIME_MILLIS_UTC | VARCHAR2(20 OCTETS) |
TIME_MICROS | VARCHAR2(20 OCTETS) |
TIME_MICROS_UTC | VARCHAR2(20 OCTETS) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MILLIS_UTC | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
TIMESTAMP_MICROS_UTC | TIMESTAMP(6) |
TIMESTAMP_NANOS | TIMESTAMP(9) |
Pour plus d'informations sur l'utilisation des types complexes Parquet, voir DBMS_CLOUD Types complexes Avro, ORC et Parquet dans l'ensemble.
Mappage de types de données Oracle et Parquet dans l'ensemble DBMS_CLOUD
Décrit le mappage des types de données Oracle aux types de données Parquet.
Type Oracle | Type Parquet |
---|---|
BINARY_DOUBLE | Base de données |
BINARY_FLOAT | FLT |
DATE | DATE |
NUMBER(p,s) | DÉCIMAL(p,s) |
NUMÉRO(p) | DÉCIMAL(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 |
Paramètres de session NLS
Les paramètres de session NLS NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
, NLS_TIMESTAMP_TZ_FORMAT
et NLS_NUMERIC_CHARACTERS
définissent comment la date, l'horodatage, l'horodatage avec le format de fuseau horaire et le séparateur de radix pour l'horodatage avec le marqueur décimal doivent être affichés lorsqu'une table avec ces types de colonne est interrogée.
En outre, lorsque vous exportez des données à l'aide de DBMS_CLOUD.EXPORT_DATA
et spécifiez la sortie Parquet, Autonomous Database lit les valeurs de ces paramètres dans la table NLS_SESSION_PARAMETERS
. Autonomous Database utilise ces valeurs pour convertir les types de données Oracle DATE
ou TIMESTAMP
en types Parquet.
Les paramètres NLS_SESSION_PARAMETERS
prennent en charge un masque de format RR
(spécification d'année à deux caractères).
Le masque de format RR
pour l'année n'est pas pris en charge pour ces paramètres lorsque vous exportez des données vers Parquet avec DBMS_CLOUD.EXPORT_DATA
. Une erreur d'application est générée si vous tentez d'exporter vers Parquet et que NLS_SESSION_PARAMETERS
est réglé pour utiliser le masque de format RR
(la valeur par défaut du format RR
dépend de la valeur du paramètre NLS_TERRITORY
).
Lorsque l'un des paramètres NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
ou NLS_TIMESTAMP_TZ_FORMAT
utilise le masque de format RR
, vous devez remplacer la valeur de format par une valeur prise en charge pour exporter des données vers Parquet avec DBMS_CLOUD.EXPORT_DATA
. Par exemple :
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');
Si NLS_DATE_FORMAT
est défini, il s'applique aux colonnes avec le type de données DATE
. Si NLS_TIMESTAMP_FORMAT
est défini, il s'applique aux colonnes avec le type de données TIMESTAMP
. Si NLS_TIMESTAMP_TZ_FORMAT
est défini, il s'applique aux colonnes avec le type de données TIMESTAMP WITH TIME ZONE
.
Pour plus d'informations, voir Paramètres de date et d'heure dans Oracle Database 19c Database Globalization Support Guide ou Oracle Database 23ai Database Globalization Support Guide et Vues du dictionnaire de données NLS dans Oracle Database 19c Database Globalization Support Guide ou Oracle Database 23ai Database Globalization Support Guide.
Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
Décrit le mappage des types de données complexes Avro, ORC et Parquet aux types de données Oracle.
La base de données autonome prend en charge les types de données complexes, notamment les suivants :
-
structure
-
liste
-
map
-
syndicat
-
tableau
Lorsque vous spécifiez un type de fichier source Avro, ORC ou Parquet et que le fichier source contient des colonnes complexes, les interrogations de base de données autonome retournent du code JSON pour les colonnes complexes. Cela simplifie le traitement des résultats des interrogations; vous pouvez utiliser les puissantes fonctions d'analyse JSON d'Oracle pour tous les types de fichier et de données. Le tableau suivant présente le format des types complexes dans la base de données autonome :
Note :
Les champs complexes sont mappés aux colonnesVARCHAR2
et les limites de taille VARCHAR2
s'appliquent.
Type | Parquet | Code de taux d'intérêt | Avro | Oracle |
---|---|---|---|---|
List : séquence de valeurs | Liste | Liste | Array | VARCHAR2 (format JSON)
|
Map : liste d'objets avec une clé unique | Mappe | Mappe | Mappe | VARCHAR2 (format JSON)
|
Union : valeurs de types différents | non disponible | Union | Union | VARCHAR2 (format JSON)
|
Object : zéro ou plusieurs paires clé-valeur | Struct | Struct | Enregistrement | VARCHAR2 (format JSON)
|
Si vos fichiers sources ORC, Parquet ou Avro contiennent des types complexes, vous pouvez interroger la sortie JSON pour ces types complexes courants. L'exemple ci-dessous illustre un fichier ORC, movie-info.orc
, avec un type complexe (le même traitement de type complexe s'applique aux fichiers sources Parquet et Avro.
Prenons le fichier movie-info.orc
avec le schéma suivant :
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>
Notez que chaque film est classé selon plusieurs genres
à l'aide d'un tableau de genres
. Le tableau genres
est un array
de structs
et chaque élément possède un id
(int
) et un name
(string
). Le tableau genres
est considéré comme un type complexe. Vous pouvez créer une table pour ce fichier ORC en utilisant DBMS_CLOUD.CREATE_EXTERNAL_TABLE
comme suit :
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;
/
Lorsque vous créez la table externe, la base de données génère automatiquement les colonnes en fonction du schéma du fichier ORC (cela s'applique également si vous utilisez Avro ou Parquet). Pour cet exemple, DBMS_CLOUD.CREATE_EXTERNAL_TABLE
crée une table dans votre base de données comme suit :
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;
)
Vous pouvez maintenant interroger les données du film :
SELECT original_title, release_date, genres
FROM movie_info
WHERE release_date > '2000'
ORDER BY original_title;
Voici la sortie générée :
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"}]
Notez que le type complexe genres
est retourné en tant que tableau JSON.
Pour rendre les données JSON plus utiles, vous pouvez transformer la colonne à l'aide des fonctions JSON d'Oracle. Par exemple, vous pouvez utiliser la notation JSON "." ainsi que des fonctions de transformation plus puissantes telles que JSON_TABLE
.
Voir Accès simple à la notation par points aux données JSON dans Oracle Database 19c JSON Developer's Guide ou Oracle Database 23ai JSON Developer's Guide pour plus d'informations sur la notation ".".
Voir Fonction SQL/JSON JSON_TABLE dans Oracle Database 19c JSON Developer's Guide ou Oracle Database 23ai JSON Developer's Guide pour plus d'informations sur JSON_TABLE
.
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
crée une rangée pour chaque valeur du tableau, effectue une jointure externe et la structure est analysée pour extraire le nom du genre. Voici la sortie générée :
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"}]
Mappage entre noms de colonne Avro, ORC et Parquet et noms de colonne Oracle dans l'ensemble DBMS_CLOUD
Décrit les règles de conversion des noms de colonne Avro, ORC et Parquet en noms de colonne Oracle.
Les éléments suivants sont pris en charge pour les noms de colonne Avro, ORC et Parquet, mais ils peuvent nécessiter l'utilisation de guillemets doubles pour les références SQL Oracle dans les tables externes. Ainsi, pour une utilisation plus facile et pour éviter d'utiliser des guillemets doubles lors du référencement des noms de colonne, si possible, n'utilisez pas les éléments suivants dans les noms de colonne Avro, ORC et Parquet :
-
Espaces intégrés
-
Chiffres au début
-
Traits de soulignement au début
-
Mots réservés Oracle SQL
Le tableau suivant présente différents types de noms de colonne Avro, ORC et Parquet et les règles d'utilisation de ceux-ci dans les noms de colonne Oracle dans les tables externes.
Nom Avro, ORC ou Parquet | Nom CREATE TABLE | CATALOGUE Oracle | SQL valide | Notes |
---|---|---|---|---|
part, Part ou PART | PART, PART, PART | PIÈCE |
|
Oracle met implicitement en majuscules les noms de colonne sans guillemets |
N° commande | "N° commande" | N° commande | select "Ord No" |
Des guillemets doubles sont requis lorsque des espaces sont intégrés, ce qui permet également de préserver la casse des caractères |
__index_clé__ | "__index_key__" | __index_clé__ | select "__index_key__" |
Des guillemets doubles sont requis lorsqu'un trait de soulignement est présent au début, ce qui permet également de préserver la casse des caractères |
6Way | "6Way" | 6Way | select "6Way" |
Des guillemets doubles sont requis lorsqu'un chiffre est présent au début, ce qui permet également de préserver la casse des caractères |
create, Create ou CREATE, etc. (toutes les variantes de casse) partition, Partition, PARTITION, etc. (pour un mot réservé Oracle) | "CRÉER" "PARTITION" | CRÉER UNE PARTITION |
|
Les mots réservés Oracle SQL doivent être encadrés de guillemets. Ils sont mis en majuscules, mais doivent toujours figurer entre guillemets lorsqu'ils sont utilisés dans des énoncés SQL |
ROWID, ROWID, ROWid, etc. (pour ROWID, voir les notes) | ID rangée |
|
Pour ROWID, en casse mixte ou en minuscules, la casse est préservée. ROWID doit figurer entre guillemets et utiliser les variantes de casse d'origine. En raison d'un conflit inhérent avec le ROWID Oracle pour la table, si vous spécifiez un ROWID en majuscules, il est automatiquement stocké en tant que "ROWID" en minuscules et doit toujours être entre apostrophes lorsqu'il est référencé. |
Notes :
-
En général, un nom de colonne d'une table externe peut être référencé sans guillemets doubles.
-
À moins qu'il n'y ait un espace intégré, un trait de soulignement de début ("_") ou un chiffre de début ("0" à "9") dans le nom de colonne, la casse initiale du nom de colonne est conservée. Le nom de colonne doit toujours être référencé avec des guillemets doubles et avec la casse initiale (majuscules, minuscules ou casse mixte) du nom de colonne Avro, ORC ou Parquet.
-
Après avoir utilisé
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
pour créer une table externe au format spécifié en tant qu'avro
,orc
ouparquet
, utilisez la commandeDESCRIBE
dans SQL*Plus pour voir les noms de colonne de la table. -
Lorsque les mots réservés Oracle SQL sont utilisés dans les noms de colonne Avro, ORC ou Parquet, ils doivent toujours être entre guillemets lorsqu'ils sont référencés n'importe où dans SQL. Pour plus d'informations, voir Mots réservés Oracle SQL dans Informations de référence sur le langage SQL pour Oracle Database 23ai ou Informations de référence sur le langage SQL pour Oracle Database 23ai.