Carregar um Array de Documentos JSON para uma Coleção

Para carregar dados de coleções na Nuvem, primeiro armazene suas credenciais de armazenamento de objetos no seu Autonomous Database e, em seguida, use o procedimento PL/SQL DBMS_CLOUD.COPY_COLLECTION para carregar documentos em uma coleção. Este tópico explica como carregar documentos em seu banco de dados de um array JSON em um arquivo.

Observação

Você também pode carregar documentos de um array JSON em um arquivo para uma coleção usando SODA for REST. Consulte Load Purchase-Order Sample Data Using SODA for REST.

Este exemplo usa o arquivo JSON fruit_array.json. Veja a seguir o conteúdo do arquivo fruit_array.json:

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

Antes de carregar dados no Autonomous Database, copie os dados para seu armazenamento de objetos da seguinte forma:

  • Crie um bucket no armazenamento de objetos. Por exemplo, crie um bucket do Oracle Cloud Infrastructure Object Store no link do Oracle Cloud Infrastructure Object Storage, no Compartimento selecionado, clicando em Criar Bucket, ou use uma ferramenta de linha de comando como o seguinte comando da CLI do OCI:

    oci os bucket create -name json_bucket -c <compartment id>
  • Copie o arquivo JSON para o armazenamento de objetos. Por exemplo, o seguinte comando da CLI do OCI copia o arquivo JSON fruit_array.json para o armazenamento de objetos:

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

Carregue o arquivo JSON do armazenamento de objetos para uma coleção SODA chamada fruit2 no seu banco de dados:

  1. Armazene suas credenciais de armazenamento de objetos usando o procedimento DBMS_CLOUD.CREATE_CREDENTIAL, conforme mostrado no seguinte exemplo:
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    Esta operação armazena as credenciais no banco de dados em um formato criptografado. Você pode usar qualquer nome para o nome da credencial. Observe que essa etapa só é necessária uma vez, a menos que suas credenciais do armazenamento de objetos sejam alteradas. Depois de armazenar as credenciais, você poderá usar o mesmo nome de credencial para carregar todos os documentos.

    Consulte Procedimento CREATE_CREDENTIAL para obter informações detalhadas sobre os parâmetros.

    Observação

    Algumas ferramentas como SQL*Plus e SQL Developer usam o E comercial (&) como caractere especial. Se você tiver o caractere de E comercial em sua senha, use o comando SET DEFINE OFF nessas ferramentas, conforme mostrado no exemplo, para desativar o caractere especial e fazer com que a credencial seja criada corretamente.
  2. Carregue os dados em uma coleção usando o procedimento 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;
    /

    Neste exemplo, você carrega um único valor JSON que ocupa todo o arquivo; por isso, não há necessidade de especificar um delimitador de registro. Para indicar que não há delimitador de registro, você pode usar um caractere que não ocorra no arquivo de entrada. Para este exemplo, para indicar que não há delimitador, o caractere de controle 0x01 (SOH) é definido para carregar os documentos JSON em uma coleção. Assim, você especifica um valor para recorddelimiter que não ocorre no arquivo JSON. Por exemplo, você pode usar o valor "0x''01''" porque ele não ocorre diretamente no texto JSON.

    Quando o parâmetro unpackarrays do valor de formato é definido como TRUE, o array de documentos é carregado como documentos individuais, e não como um array inteiro. No entanto, a descompactação de elementos do array é limitada a um único nível. Se houver arrays aninhados nos documentos, esses arrays não serão descompactados.

    Os parâmetros são:

    • collection_name: é o nome da coleção de destinos.

    • credential_name: é o nome da credencial criada na etapa anterior. O parâmetro credential_name deve estar em conformidade com as convenções de nomenclatura do objeto Oracle. Consulte Regras de Nomenclatura do Objeto de Banco de Dados para obter mais informações.

    • file_uri_list: é uma lista delimitada por vírgulas dos arquivos de origem que você deseja carregar.

    • format: define as opções que você pode especificar para descrever o formato do arquivo de origem. As opções de formato characterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrays são suportadas para carregar dados JSON. Qualquer outro formato especificado resultará em um erro.

      Se os dados em seus arquivos de origem forem criptografados, decriptografe os dados especificando o parâmetro format com a opção encryption. Consulte Descriptografar Dados ao Importar do Serviço Object Storage para obter mais informações sobre como decriptografar dados.

      Consulte DBMS_CLOUD Package Format Options para obter mais informações.

    Neste exemplo, namespace-string corresponde ao namespace do armazenamento de objetos do Oracle Cloud Infrastructure e bucketname corresponde ao nome do bucket. Consulte Noções Básicas de Namespaces do serviço Object Storage para obter mais informações.

    Para obter informações detalhadas sobre os parâmetros, consulte Procedimento COPY_COLLECTION.

A carga de fruit_array.json, com DBMS_CLOUD.COPY_COLLECTION usando a opção de formato unpackarrays reconhece valores de array na origem e, em vez de carregar os dados como documento único, como seria por padrão, os dados são carregados na coleção fruit2 com cada valor no array como documento único.