Charger un tableau de documents JSON dans une collection

Pour charger des données à partir de collections dans le nuage, vous devez d'abord stocker vos données d'identification de stockage d'objets dans votre base de données d'intelligence artificielle autonome, puis utiliser la procédure PL/SQL DBMS_CLOUD.COPY_COLLECTION pour charger des documents dans une collection. Cette rubrique explique comment charger des documents dans votre base de données à partir d'un tableau JSON dans un fichier.

Note

Vous pouvez également charger des documents à partir d'un tableau JSON dans un fichier dans une collection à l'aide de SODA pour REST. Voir Charger des données-échantillons de bon de commande à l'aide de SODA pour REST.

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 }]

Avant de charger des données dans Autonomous AI Database, copiez les données dans votre magasin d'objets comme suit :

  • Créez un seau dans le magasin d'objets. Par exemple, créez un seau de magasin d'objets Oracle Cloud Infrastructure à partir du lien Oracle Cloud Infrastructure Object Storage, dans le compartiment sélectionné, en cliquant sur Créer un seau, ou utilisez un outil de ligne de commande tel que la commande d'interface de ligne de commande OCI suivante :

    oci os bucket create -name json_bucket -c <compartment id>
  • Copiez le fichier JSON dans le magasin d'objets. Par exemple, la commande d'interface de ligne de commande OCI suivante copie le fichier JSON fruit_array.json dans le magasin d'objets :

    oci os object put --bucket-name json_bucket --file "fruit_array.json"

Chargez le fichier JSON à partir du magasin d'objets dans une collection SODA nommée fruit2 sur votre base de données :

  1. Stockez vos données d'identification de magasin d'objets à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL, comme illustré dans l'exemple suivant :
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    Cette opération stocke les données d'identification dans la base de données dans un format chiffré. Vous pouvez utiliser n'importe quel nom pour les données d'identification. Notez que cette étape n'est requise qu'une seule fois, sauf si les données d'identification du magasin d'objets changent. Une fois les données d'identification stockées, vous pouvez utiliser le même nom pour charger tous les documents.

    Voir Procédure CREATE_CREDENTIAL pour des informations détaillées sur les paramètres.

    Note

    Certains outils tels que SQL*Plus et SQL Developer utilisent le caractère esperluette (&) en tant que caractère spécial. Si votre mot de passe contient le caractère esperluette, utilisez la commande SET DEFINE OFF dans ces outils, comme illustré dans l'exemple, pour désactiver le caractère spécial et obtenir les données d'identification créées correctement.
  2. Chargez les données dans une collection à l'aide de la procédure DBMS_CLOUD.COPY_COLLECTION.
    
    BEGIN 
      DBMS_CLOUD.COPY_COLLECTION(    
        collection_name => 'fruit2',    
        credential_name => 'DEF_CRED_NAME',    
        file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/json/o/fruit_array.json',
        format => '{"recorddelimiter" : "0x''01''", "unpackarrays" : "TRUE", "maxdocsize" : "10240000"}'
      );
    END;
    /

    Dans cet exemple, vous chargez une seule valeur JSON qui occupe l'ensemble du fichier. Il n'est donc pas nécessaire de spécifier un délimiteur d'enregistrement. Pour indiquer qu'il n'y a pas de délimiteur d'enregistrement, vous pouvez utiliser un caractère qui ne se trouve pas dans le fichier d'entrée. Pour cet exemple, pour indiquer qu'il n'y a pas de délimiteur, le caractère de contrôle 0x01 (SOH) est défini pour charger les documents JSON dans une collection. Ainsi, vous spécifiez une valeur pour recorddelimiter qui ne se trouve pas dans le fichier JSON. Par exemple, vous pouvez utiliser la valeur "0x''01''", car ce caractère n'apparaît pas directement dans le texte JSON.

    Lorsque le paramètre unpackarrays de la valeur de format est réglé à TRUE, le tableau de documents est chargé sous la forme de documents individuels plutôt qu'en tant que tableau entier. La décompression des éléments du tableau est toutefois limitée à un seul niveau. S'il existe des tableaux imbriqués dans les documents, ils ne sont pas décompressés.

    Les paramètres sont les suivants :

    • collection_name : Nom de la collection cible.

    • credential_name : Nom des données d'identification créées à l'étape précédente. Le paramètre credential_name doit être conforme aux conventions d'attribution de nom d'objet Oracle. Pour plus d'informations, voir Règles d'attribution de nom aux objets de base de données.

    • file_uri_list : Liste séparée par des virgules des fichiers sources à charger.

    • format : Définit les options que vous pouvez spécifier pour décrire le format du fichier source. Les options de format characterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrays sont prises en charge pour le chargement des données JSON. Tout autre format spécifié génère une erreur.

      Si les données de vos fichiers sources sont chiffrées, déchiffrez les données en spécifiant le paramètre format avec l'option encryption. Voir Décrypter les données lors de l'importation à partir du stockage d'objets pour plus d'informations sur le déchiffrement des données.

      Pour plus d'informations, voir Options de format d'ensemble DBMS_CLOUD.

    Dans cet exemple, namespace-string est l'espace de noms du stockage d'objets pour Oracle Cloud Infrastructure et bucketname est le nom du seau. Pour plus d'informations, voir Présentation des espaces de noms du stockage d'objets.

    Pour des informations détaillées sur les paramètres, voir ProcédureCOPY_COLLECTION.

Le chargement de fruit_array.json, avec DBMS_CLOUD.COPY_COLLECTION à l'aide de l'option de format unpackarrays, reconnaît les valeurs de tableau dans la source et, au lieu de charger les données sous forme de document unique, comme c'est le cas par défaut, les données sont chargées dans la collection fruit2 avec chaque valeur du tableau sous forme de document unique.