Chargement des données de fichiers dans le cloud
Le package PL/SQL DBMS_CLOUD
prend en charge le chargement de données à partir de fichiers dans le cloud vers des tables créées dans Autonomous Database on Dedicated Exadata Infrastructure.
DBMS_CLOUD
:
- Fichiers texte dans le cloud, à l'aide de la procédure
DBMS_CLOUD.COPY_DATA
- Fichiers JSON dans le cloud, à l'aide de la procédure
DBMS_CLOUD.COPY_TEXT
- Le fichier source est disponible en tant que fichier local sur l'ordinateur client ou téléchargé vers une banque d'objets cloud, telle qu'Oracle Cloud Infrastructure Object Storage. Il est accessible pour l'utilisateur de base de données qui tente de charger les données.
- Vos informations d'identification du stockage d'objet cloud sont stockées à l'aide de la procédure
DBMS_CLOUD.CREATE_CREDENTIAL
. Pour plus d'informations, reportez-vous à Création d'informations d'identification.
Le package DBMS_CLOUD
prend en charge le chargement à partir de fichiers stockés dans les services cloud suivants : Oracle Cloud Infrastructure Object Storage, Oracle Cloud Infrastructure Object Storage Classic, Azure Blob Storage et Amazon S3.
Rubriques connexes
Création d'informations d'identification
Découvrez comment stocker vos informations d'identification du stockage d'objet cloud à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL
.
DBMS_CLOUD.CREATE_CREDENTIAL
à l'aide de n'importe quel outil de base de données tel que SQL*Plus, SQL Developer ou Database Actions (outil SQL Developer Web). Exemple :BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
(
credential_name => 'DEF_CRED_NAME',
username => 'adb_user@oracle.com',
password => 'password'
);
END;
/
Les valeurs fournies pour username
et password
dépendent du service Cloud Object Storage que vous utilisez :
-
Oracle Cloud Infrastructure Object Storage :
username
est votre nom utilisateur Oracle Cloud Infrastructure etpassword
est votre jeton d'authentification Oracle Cloud Infrastructure. Reportez-vous à Utilisation des jetons d'authentification. -
Oracle Cloud Infrastructure Object Storage Classic :
username
est votre nom utilisateur Oracle Cloud Infrastructure Classic etpassword
est votre mot de passe Oracle Cloud Infrastructure Classic.
Cette opération stocke les informations d'identification dans la base de données dans un format crypté. Vous pouvez utiliser n'importe quel nom d'informations d'identification. Cette étape est requise une seule fois, sauf si les informations d'identification de banque d'objets changent. Une fois les informations d'identification stockées, vous pouvez utiliser le même nom d'informations d'identification pour tous les chargements de données.
Chargement des données de fichiers texte
Découvrez comment charger des données à partir de fichiers texte dans le cloud vers votre instance Autonomous Database à l'aide de la procédure DBMS_CLOUD.COPY_DATA
.
Le fichier source de cet exemple, channels.txt
, contient les données suivantes :
S,Direct Sales,Direct T,Tele Sales,Direct C,Catalog,Indirect I,Internet,Indirect P,Partners,Others
Chargement d'un fichier JSON de documents délimités dans une collection
Découvrez comment charger un fichier JSON de documents délimités dans une collection dans votre instance Autonomous Database à l'aide de la procédure DBMS_CLOUD.COPY_DATA
.
Cet exemple charge les valeurs JSON à partir d'un fichier délimité par des lignes et utilise le fichier JSON myCollection.json
. Chaque valeur (ligne) est chargée dans une collection sur votre instance Autonomous Database en tant que document unique.
Voici un exemple de fichier de ce type. Il comporte trois lignes, avec un objet par ligne. Chacun de ces objets est chargé en tant que document JSON distinct.
{ "name" : "apple", "count": 20 } { "name" : "orange", "count": 42 } { "name" : "pear", "count": 10 }
Chargement d'un tableau de documents JSON dans une collection
Découvrez comment charger un tableau de documents JSON dans une collection dans votre instance Autonomous Database à l'aide de la procédure DBMS_CLOUD.COPY_COLLECTION
.
Cet exemple utilise le fichier JSON fruit_array.json
. Voici le contenu du fichier fruit_array.json
:
[{"name" : "apple", "count": 20 }, {"name" : "orange", "count": 42 }, {"name" : "pear", "count": 10 }]
Copie de données JSON dans une table existante
Utilisez DBMS_CLOUD.COPY_DATA
pour charger des données JSON dans le cloud vers une table.
Dans cet exemple, le fichier source est un fichier de données JSON.
Surveillance et dépannage d'un chargement de données
Toutes les opérations de chargement de données effectuées à l'aide du package PL/SQL
sont consignées dans les tables DBMS_CLOUD
dba_load_operations
et user_load_operations
:
-
dba_load_operations
affiche toutes les opérations de chargement. -
user_load_operations
affiche les opérations de chargement dans votre schéma.
Interrogez ces tables pour obtenir des informations sur les chargements de données en cours et terminés. Par exemple, l'utilisation d'une instruction SELECT
avec un prédicat de clause WHERE
sur la colonne TYPE
affiche les opérations de chargement de type COPY
:
SELECT table_name, owner_name, type, status, start_time, update_time, logfile_table, badfile_table
FROM user_load_operations WHERE type = 'COPY';
TABLE_NAME OWNER_NAME TYPE STATUS START_TIME UPDATE_TIME LOGFILE_TABLE BADFILE_TABLE
---------- ----------- ------- ---------- ---------------------- --------------------- --------------- ------------- ------------- -------------
CHANNELS SH COPY COMPLETED 04-MAR-21 07.38.30.522711000 AM GMT 04-MAR-21 07.38.30.522711000 AM GMT COPY$1_LOG COPY$1_BAD
La colonne LOGFILE_TABLE
indique le nom de la table que vous pouvez interroger pour consulter le journal d'une opération de chargement. Par exemple, la requête suivante affiche le journal de l'opération de chargement :
select * from COPY$21_LOG;
La colonne BADFILE_TABLE
indique le nom de la table que vous pouvez interroger pour consulter les lignes qui ont rencontré des erreurs lors du chargement. Par exemple, la requête suivante affiche les enregistrements rejetés pour l'opération de chargement :
select * from COPY$21_BAD;
En fonction des erreurs présentes dans le journal et des lignes affichées dans la table BADFILE_TABLE
spécifiée, vous pouvez corriger l'erreur en indiquant les options de format appropriées dans DBMS_CLOUD.COPY_DATA
.
Remarques :
Les tablesLOGFILE_TABLE
et BADFILE_TABLE
sont stockées pendant deux jours pour chaque opération de chargement, puis enlevées automatiquement.
Pour plus d'informations sur l'effacement de la table user_load_operations
, reportez-vous à Procédure DELETE_ALL_OPERATIONS.
Objets JSON textuels représentant des valeurs scalaires étendues
Les données JSON binaires natives (format OSON) étendent le langage JSON en ajoutant des types scalaires (comme une date) qui correspondent aux types SQL et ne font pas partie de la norme JSON. Oracle Database permet également d'utiliser des objets JSON textuels qui représentent des valeurs scalaires JSON, y compris ces valeurs non standard.
Lorsque vous créez des données JSON binaires natives à partir de données JSON textuelles contenant de tels objets étendus, vous pouvez éventuellement les remplacer par des valeurs scalaires JSON (binaires natives) correspondantes.
{"$numberDecimal":31}
est un exemple d'objet étendu. Il représente une valeur scalaire JSON du type non standard numéro décimal. Lorsqu'il est interprété comme tel, il est remplacé par un nombre décimal au format binaire natif.
Par exemple, lorsque vous utilisez le constructeur de type de données JSON, JSON
, si vous utilisez le mot-clé EXTENDED
, les objets étendus reconnus dans l'entrée textuelle sont remplacés par les valeurs scalaires correspondantes dans le résultat JSON binaire natif. Si vous n'incluez pas le mot-clé EXTENDED
, aucun remplacement de ce type ne se produit. Les objets JSON étendus textuels sont simplement convertis tels quels en objets JSON au format binaire natif.
A l'inverse, lorsque vous utilisez la fonction Oracle SQL json_serialize
pour sérialiser des données JSON binaires en tant que données JSON textuelles (VARCHAR2
, CLOB
ou BLOB
), vous pouvez utiliser le mot-clé EXTENDED
pour remplacer les valeurs scalaires JSON (binaires natives) par les objets JSON étendus textuels correspondants.
Remarques :
Si la base de données que vous utilisez est une instance Oracle Autonomous Database, vous pouvez utiliser la procédure PL/SQL DBMS_CLOUD.copy_collection
pour créer une collection de documents JSON à partir d'un fichier de données JSON tel que celui produit par les bases de données NoSQL standard, y compris Oracle NoSQL Database.
Si vous utilisez ejson
comme valeur du paramètre type
de la procédure, les objets JSON étendus reconnus dans le fichier d'entrée sont remplacés par les valeurs scalaires correspondantes dans la collection JSON binaire native générée. A l'inverse, vous pouvez utiliser la fonction json_serialize
avec le mot-clé EXTENDED
pour remplacer les valeurs scalaires par des objets JSON étendus dans les données JSON textuelles générées.
Voici les deux principaux cas d'emploi des objets étendus :
-
Echange (import/export) :
-
Incluez des données JSON existantes (à partir d'un emplacement) contenant des objets étendus.
-
Sérialisez des données JSON binaires natives en tant que données JSON textuelles avec des objets étendus, pour une utilisation en dehors de la base de données.
-
-
Inspection des données JSON binaires natives : découvrez ce dont vous disposez en consultant les objets étendés correspondants.
A des fins d'échange, vous pouvez inclure des données JSON à partir d'un fichier produit par des bases de données NoSQL standard, y compris Oracle NoSQL Database, en convertissant des objets étendus en valeurs scalaires JSON binaires natives. A l'inverse, vous pouvez exporter des données JSON binaires natives en tant que données textuelles, ce qui remplace les valeurs JSON scalaires propres à Oracle par les objets JSON étendus textuels correspondants.
Conseil :
Voici un exemple d'inspection : prenons un objet tel que {"dob" : "2000-01-02T00:00:00"}
comme résultat de la sérialisation des données JSON natives. "2000-01-02T00:00:00"
est-il le résultat de la sérialisation d'une valeur binaire native de type date ou la valeur binaire native n'est-elle qu'une chaîne ? L'utilisation de json_serialize
avec le mot-clé EXTENDED
vous permet de le savoir.
La mise en correspondance des champs d'objet étendu avec des types JSON scalaires est, en général, de plusieurs à un : plusieurs types d'objet JSON étendu peuvent être mis en correspondance avec une valeur scalaire donnée. Par exemple, les objets JSON étendus {"$numberDecimal":"31"}
et {"$numberLong:"31"}
sont tous deux traduits par la valeur 31 du nombre de types scalaires en langage JSON, et la méthode d'élément type()
renvoie "number"
pour chacune de ces valeurs scalaires JSON.
La méthode d'élément type()
indique le type de valeur scalaire en langage JSON de sa valeur cible (en tant que chaîne JSON). Certaines valeurs scalaires peuvent être distinguées en interne, même si elles ont le même type scalaire. Cela permet généralement à la fonction json_serialize
(avec le mot-clé EXTENDED
) de reconstruire l'objet JSON étendu d'origine. Ces valeurs scalaires se distinguent en interne par l'utilisation de différents types SQL pour les implémenter ou par leur balisage avec le type d'objet JSON étendu dont elles sont dérivées.
Lorsque json_serialize
reconstruit l'objet JSON étendu d'origine, le résultat n'est pas toujours textuellement identique à l'original, mais il est toujours semantiquement équivalent. Par exemple, {"$numberDecimal":"31"}
et {"$numberDecimal":31}
sont sémantiquement équivalents, même si les valeurs de champ diffèrent par leur type (chaîne et nombre). Ces valeurs sont converties en la même valeur interne et chacune est balisée comme étant dérivée d'un objet étendu $numberDecimal
(balise identique). Mais en cas de série, le résultat pour les deux est {"$numberDecimal":31}
. Oracle utilise toujours le type le plus approprié directement pour la valeur de champ, qui est dans ce cas la valeur en langage JSON 31
, de type de valeur scalaire nombre.
Le tableau - présente les correspondances entre les différents types utilisés. Il met en correspondance (1) les types d'objet étendu utilisés en tant qu'entrée, (2) les types signalés par la méthode d'élément type()
, (3) les types SQL utilisés en interne, (4) les types en langage JSON standard utilisés en tant que sortie par la fonction json_serialize
et (5) les types d'objet étendu générés par json_serialize
lorsque le mot-clé EXTENDED
est indiqué.
Table - Relations des types d'objet JSON étendu
Type d'objet étendu (entrée) | Type de valeur scalaire JSON Oracle (signalé par type()) | Type de valeur scalaire SQL | Type de valeur scalaire JSON standard (sortie) | Type d'objet étendu (sortie) |
---|---|---|---|---|
$numberDouble avec comme valeur un nombre JSON, une chaîne représentant le nombre ou l'une des chaînes suivantes : "Infinity" , "-Infinity" , "Inf" , "-Inf" , "Nan" Note de bas de page 1
|
double | BINARY_DOUBLE |
nombre |
$numberDouble avec comme valeur un nombre JSON ou l'une des chaînes suivantes : "Inf" , "-Inf" , "Nan" Note de bas de page 2 |
$numberFloat avec la même valeur que pour $numberDouble |
float | BINARY_FLOAT |
nombre |
$numberFloat avec la même valeur que pour $numberDouble |
$numberDecimal avec la même valeur que pour $numberDouble |
nombre | NUMBER |
nombre |
$numberDecimal avec la même valeur que pour $numberDouble |
$numberInt avec comme valeur un entier signé sur 32 bits ou une chaîne représentant le nombre
|
nombre | NUMBER |
nombre |
$numberInt avec la même valeur que pour $numberDouble |
$numberLong avec comme valeur un nombre JSON ou une chaîne représentant le nombre
|
nombre | NUMBER |
nombre |
$numberLong avec la même valeur que pour $numberDouble |
Lorsque la valeur est une chaîne de caractères Base64, l'objet étendu peut également avoir le champ |
binaire | BLOB ou RAW |
chaîne Une conversion équivaut à l'utilisation de la fonction SQL |
Valeurs possibles :
|
$oid avec comme valeur une chaîne de 24 caractères hexadécimaux
|
binaire | RAW(12) |
chaîne Une conversion équivaut à l'utilisation de la fonction SQL |
$rawid avec comme valeur une chaîne de 24 caractères hexadécimaux
|
$rawhex avec comme valeur une chaîne avec un nombre pair de caractères hexadécimaux
|
binaire | RAW |
chaîne Une conversion équivaut à l'utilisation de la fonction SQL |
$binary avec comme valeur une chaîne de caractères Base64 complétée à droite avec des caractères =
|
$rawid avec comme valeur une chaîne de 24 ou 32 caractères hexadécimaux
|
binaire | RAW |
chaîne Une conversion équivaut à l'utilisation de la fonction SQL |
$rawid |
$oracleDate avec comme valeur une chaîne de date au format ISO 8601
|
Date | DATE |
chaîne |
$oracleDate avec comme valeur une chaîne de date au format ISO 8601
|
$oracleTimestamp avec comme valeur une chaîne d'horodatage au format ISO 8601
|
timestamp | TIMESTAMP |
chaîne |
$oracleTimestamp avec comme valeur une chaîne d'horodatage au format ISO 8601
|
$oracleTimestampTZ avec comme valeur une chaîne d'horodatage au format ISO 8601 avec décalage de fuseau horaire numérique ou avec Z |
horodatage avec fuseau horaire | TIMESTAMP WITH TIME ZONE |
chaîne |
$oracleTimestampTZ avec comme valeur une chaîne d'horodatage au format ISO 8601 avec décalage de fuseau horaire numérique ou avec Z |
|
horodatage avec fuseau horaire | TIMESTAMP WITH TIME ZONE |
chaîne |
$oracleTimestampTZ avec comme valeur une chaîne d'horodatage au format ISO 8601 avec décalage de fuseau horaire numérique ou avec Z |
$intervalDaySecond avec comme valeur une chaîne d'intervalle au format ISO 8601 telle qu'indiquée pour la fonction SQL to_dsinterval |
daysecondInterval | INTERVAL DAY TO SECOND |
chaîne |
$intervalDaySecond avec comme valeur une chaîne d'intervalle au format ISO 8601 telle qu'indiquée pour la fonction SQL to_dsinterval |
$intervalYearMonth avec comme valeur une chaîne d'intervalle au format ISO 8601 telle qu'indiquée pour la fonction SQL to_yminterval |
yearmonthInterval | INTERVAL YEAR TO MONTH |
chaîne |
$intervalYearMonth avec comme valeur une chaîne d'intervalle au format ISO 8601 telle qu'indiquée pour la fonction SQL to_yminterval |
Deux champs :
|
vecteur | VECTOR |
tableau de nombres |
Deux champs :
|
Note de bas de page 1 Les valeurs de chaîne sont interprétées sans respect des casse. Par exemple, "NAN"
"nan"
et "nAn"
sont acceptés et équivalents, de même pour "INF"
, "inFinity"
et "iNf"
. Les nombres infiniment grands ("Infinity"
ou "Inf"
) et petits ("-Infinity"
ou "-Inf"
) sont acceptés avec le mot complet ou l'abréviation.
Note de bas de page 2 Sur la sortie, seules les valeurs de chaîne suivantes sont utilisées : pas le mot entier Infinity ni de variantes de casse.
Rubriques connexes :
Norme IEEE sur l'arithmétique à virgule flottante (IEEE 754)