Carga de una matriz de documentos JSON en una recopilación

Para cargar datos de recopilaciones en la nube, primero debe almacenar las credenciales de almacenamiento de objetos en Autonomous Database y, a continuación, utilizar el procedimiento PL/SQL DBMS_CLOUD.COPY_COLLECTION para cargar documentos en una recopilación. En este tema se explica cómo cargar documentos en la base de datos desde una matriz de JSON en un archivo.

Nota

También puede cargar documentos de una matriz de JSON en un archivo en una recopilación mediante SODA para REST. Consulte Carga de datos de muestra de orden de compra mediante SODA para REST.

En este ejemplo se utiliza el archivo JSON fruit_array.json. A continuación, se muestra el contenido del archivo fruit_array.json:

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

Antes de cargar datos en Autonomous Database, copie los datos en el almacén de objetos de esta forma:

  • Cree un cubo en el almacén de objetos. Por ejemplo, cree un cubo de Oracle Cloud Infrastructure Object Store desde el enlace de Oracle Cloud Infrastructure Object Storage, en el compartimento seleccionado. Para ello, haga clic en Crear cubo o utilice una herramienta de línea de comandos como el siguiente comando de la CLI de OCI:

    oci os bucket create -name json_bucket -c <compartment id>
  • Copie el archivo JSON en el almacén de objetos. Por ejemplo, con el siguiente comando de la CLI de OCI se copia el archivo JSON fruit_array.json en el almacén de objetos:

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

Cargue el archivo JSON del almacén de objetos en una recopilación de SODA denominada fruit2 en la base de datos:

  1. Store las credenciales del almacén de objetos mediante el procedimiento DBMS_CLOUD.CREATE_CREDENTIAL, como se muestra en el siguiente ejemplo:
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    Esta operación almacena las credenciales en la base de datos en un formato cifrado. Puede utilizar cualquier nombre para el nombre de credencial. Tenga en cuenta que este paso solo es necesario una vez, a menos que cambien las credenciales del almacén de objetos. Una vez almacenadas las credenciales, puede utilizar el mismo nombre de credencial para cargar todos los documentos.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener información detallada sobre los parámetros.

    Nota

    Algunas herramientas como SQL*Plus y SQL Developer utilizan el carácter de ampersand (&) como carácter especial. Si tiene el carácter de ampersand en la contraseña, utilice el comando SET DEFINE OFF en esas herramientas como se muestra en el ejemplo para desactivar el carácter especial y obtener la credencial creada correctamente.
  2. Load the data into a collection using the procedure 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;
    /

    En este ejemplo, se carga un único valor JSON que ocupa todo el archivo, por lo que no es necesario especificar un delimitador de registro. Para indicar que no hay ningún delimitador de registro, puede utilizar un carácter que no se produzca en el archivo de entrada. Para este ejemplo, para indicar que no hay ningún delimitador, el carácter de control 0x01 (SOH) se define para cargar los documentos JSON en una recopilación. Por lo tanto, especifique un valor para recorddelimiter que no se produzca en el archivo JSON. Por ejemplo, puede utilizar el valor "0x''01''" porque este carácter no se produce directamente en el texto JSON.

    Cuando el parámetro unpackarrays para el valor de formato se define en TRUE, la matriz de documentos se carga como documentos individuales en lugar de como una matriz completa. Sin embargo, el desempaquetado de elementos de matriz está limitado a un único nivel. Si hay matrices anidadas en los documentos, esas matrices no se desempaquetan.

    Los parámetros son:

    • collection_name: es el nombre de la recopilación de destino.

    • credential_name: es el nombre de la credencial creada en el paso anterior. El parámetro credential_name debe cumplir las convenciones de nomenclatura de objetos de Oracle, que no permiten espacios ni guiones.

    • file_uri_list: es una lista delimitada por comas de los archivos de origen que desea cargar.

    • format: define las opciones que puede especificar para describir el formato del archivo de origen. Las opciones de formato characterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrays están soportadas para cargar datos JSON. Cualquier otro formato especificado producirá un error.

      Si los datos de los archivos de origen están cifrados, descifre los datos especificando el parámetro format con la opción encryption. Consulte Descifrado de datos durante la importación desde Object Storage para obtener más información sobre el descifrado de datos.

      Para obtener más información, consulte DBMS_CLOUD Package Format Options.

    En este ejemplo, namespace-string es el espacio de nombres de almacenamiento de objetos de Oracle Cloud Infrastructure, y bucketname es el nombre del cubo. Consulte Descripción de los espacios de nombres de Object Storage para obtener más información.

    Para obtener información detallada sobre los parámetros, consulte COPY_COLLECTION Procedure.

La carga de fruit_array.json, con DBMS_CLOUD.COPY_COLLECTION mediante la opción de formato unpackarrays, reconoce los valores de matriz en el origen y, en lugar de cargar los datos como un único documento, como por defecto, los datos se cargarían en la recopilación fruit2 con cada valor de la matriz como un único documento.