Chargement d'un tableau de documents JSON dans une collection

Pour charger des données à partir de collections dans le cloud, vous devez d'abord stocker vos informations d'identification de stockage d'objets dans votre instance Autonomous Database, 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 la base de données à partir d'un tableau JSON dans un fichier.

Remarque

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

Cet exemple utilise le fichier JSON fruit_array.json. Le contenu du fichier fruit_array.json est indiqué ci-dessous :

[{"name" : "apple", "count": 20 },
 {"name" : "orange", "count": 42 },
 {"name" : "pear", "count": 10 }]

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

  • Créez un bucket dans la banque d'objets. Par exemple, créez un bucket de banque d'objets Oracle Cloud Infrastructure à partir du lien Oracle Cloud Infrastructure Object Storage, dans le compartiment sélectionné, en cliquant sur Créer un bucket 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 la banque d'objets. Par exemple, la commande d'interface de ligne de commande OCI suivante copie le fichier JSON fruit_array.json vers la banque d'objets :

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

Chargez le fichier JSON de la banque d'objets dans une collection SODA nommée fruit2 sur la base de données :

  1. Stockez les informations d'identification de la banque d'objets à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL, comme indiqué 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 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 charger tous les documents.

    Pour plus d'informations sur les paramètres, reportez-vous à Procédure CREATE_CREDENTIAL.

    Remarque

    Certains outils tels que SQL*Plus et SQL Developer utilisent le caractère esperluette (&) comme caractère spécial. Si votre mot de passe contient l'esperluette, utilisez la commande SET DEFINE OFF dans ces outils, comme indiqué dans l'exemple, pour désactiver le caractère spécial et obtenir les informations 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 valeur JSON unique qui occupe l'ensemble du fichier. Il n'est donc pas nécessaire de spécifier un délimiteur d'enregistrement. Pour indiquer l'absence de délimiteur d'enregistrement, vous pouvez utiliser un caractère qui ne figure pas dans le fichier d'entrée. Pour cet exemple, pour indiquer qu'il n'y a pas de séparateur, le caractère de contrôle 0x01 (SOH) est défini pour charger les documents JSON dans une collection. Par conséquent, vous indiquez une valeur pour recorddelimiter qui n'est pas présente dans le fichier JSON. Par exemple, vous pouvez utiliser la valeur "0x''01''" car ce caractère ne figure pas directement dans le texte JSON.

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

    Les paramètres sont les suivants :

    • collection_name : nom de la collection cible.

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

    • file_uri_list : liste des fichiers source à charger, séparés par une virgule.

    • format : définit les options que Vous pouvez indiquer 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é entraîne une erreur.

      Si les données de vos fichiers source sont cryptées, décryptez les données en indiquant le paramètre format avec l'option encryption. Pour plus d'informations sur le décryptage des données, reportez-vous à Décryptage des données lors de l'import à partir d'Object Storage.

      Pour plus d'informations, reportez-vous à DBMS_CLOUD Options de format de package.

    Dans cet exemple, namespace-string est l'espace de noms d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Pour obtenir des informations détaillées sur les paramètres, reportez-vous à la procédure COPY_COLLECTION.

La charge de fruit_array.json, avec DBMS_CLOUD.COPY_COLLECTION utilisant l'option de format unpackarrays, reconnaît les valeurs de tableau dans la source et, au lieu de charger les données en tant que document unique, comme par défaut, les données sont chargées dans la collection fruit2 avec chaque valeur du tableau en tant que document unique.