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

Para cargar datos de recopilaciones en la nube, primero debe almacenar sus credenciales de almacenamiento de objetos en su instancia de 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 de un archivo en una recopilación mediante SODA para REST. Consulte Carga de información de muestra de órdenes 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 la siguiente forma:

  • Crear un cubo en el almacén de objetos. Por ejemplo, cree un cubo del almacén de objetos de Oracle Cloud Infrastructure desde el enlace Oracle Cloud Infrastructure Object Storage, en el compartimento seleccionado, haciendo 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, el siguiente comando de la CLI de OCI 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. Almacene 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 el 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 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. Cargue los datos en una recopilación mediante el procedimiento 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 delimitador, el carácter de control 0x01 (SOH) se define para cargar los documentos JSON en una recopilación. Por lo tanto, debe especificar 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 destinos.

    • 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. Consulte Reglas de nomenclatura de objetos de base de datos para obtener más información.

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

    • format: define las opciones de las que puede especificar para describir el formato del archivo 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 Descifrar datos al importar desde Object Storage para obtener más información sobre el descifrado de datos.

      Consulte DBMS_CLOUD Package Format Options para obtener más información.

    En este ejemplo, namespace-string es el espacio Oracle Cloud Infrastructure Object Storage Namepace, 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 el Procedimiento COPY_COLLECTION.

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 se haría por defecto, los datos se cargan en la recopilación fruit2 con cada valor de la matriz como un único documento.