Caricare un array di documenti JSON in una raccolta

Per caricare i dati dalle raccolte nel cloud, è innanzitutto necessario memorizzare le credenziali di storage degli oggetti nell'Autonomous Database, quindi utilizzare la procedura PL/SQL DBMS_CLOUD.COPY_COLLECTION per caricare i documenti in una raccolta. Questo argomento spiega come caricare i documenti nel database da un array JSON in un file.

Nota

È inoltre possibile caricare i documenti da un array JSON in un file in una raccolta utilizzando SODA per REST. Vedere Carica dati campione ordine di acquisto mediante SODA per REST.

In questo esempio viene utilizzato il file JSON fruit_array.json. Di seguito viene mostrato il contenuto del file fruit_array.json:

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

Prima di caricare i dati in Autonomous Database, copiare i dati nell'area di memorizzazione degli oggetti come indicato di seguito.

  • Creare un bucket nell'area di memorizzazione degli oggetti. Ad esempio, creare un bucket dell'area di memorizzazione degli oggetti Oracle Cloud Infrastructure dal collegamento Oracle Cloud Infrastructure Object Storage, nel compartimento selezionato, facendo clic su Crea bucket oppure utilizzare uno strumento della riga di comando come il seguente comando CLI OCI:

    oci os bucket create -name json_bucket -c <compartment id>
  • Copiare il file JSON nell'area di memorizzazione oggetti. Ad esempio, il seguente comando CLI OCI copia il file JSON fruit_array.json nell'area di memorizzazione degli oggetti:

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

Caricare il file JSON dall'area di memorizzazione degli oggetti in una raccolta SODA denominata fruit2 nel database:

  1. Memorizzare le credenziali dell'area di memorizzazione degli oggetti utilizzando la procedura DBMS_CLOUD.CREATE_CREDENTIAL, come mostrato nell'esempio riportato di seguito.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    Questa operazione memorizza le credenziali nel database in formato cifrato. È possibile utilizzare qualsiasi nome per il nome della credenziale. Tenere presente che questo passo è necessario una sola volta a meno che le credenziali dell'area di memorizzazione degli oggetti non vengano modificate. Dopo aver memorizzato le credenziali, è possibile utilizzare lo stesso nome di credenziale per caricare tutti i documenti.

    Per informazioni dettagliate sui parametri, vedere CREATE_CREDENTIAL Procedura.

    Nota

    Alcuni strumenti come SQL*Plus e SQL Developer utilizzano il carattere E commerciale (&) come carattere speciale. Se la password contiene il carattere E commerciale, utilizzare il comando SET DEFINE OFF in tali strumenti come mostrato nell'esempio per disabilitare il carattere speciale e creare correttamente la credenziale.
  2. Caricare i dati in una raccolta utilizzando la procedura 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;
    /

    In questo esempio viene caricato un singolo valore JSON che occupa l'intero file, pertanto non è necessario specificare un delimitatore di record. Per indicare che non esiste un delimitatore di record, è possibile utilizzare un carattere che non si verifica nel file di input. In questo esempio, per indicare che non esiste alcun delimitatore, il carattere di controllo 0x01 (SOH) viene impostato per caricare i documenti JSON in una raccolta. È quindi possibile specificare un valore per recorddelimiter che non si verifica nel file JSON. Ad esempio, è possibile utilizzare il valore "0x''01''" perché questo carattere non si trova direttamente nel testo JSON.

    Quando il parametro unpackarrays per il valore del formato è impostato su TRUE, l'array di documenti viene caricato come singoli documenti anziché come un intero array. La decompressione degli elementi di array è tuttavia limitata a un singolo livello. Se nei documenti sono presenti array nidificati, tali array non vengono decompressi.

    Di seguito sono riportati i parametri.

    • collection_name: è il nome della raccolta di destinazione.

    • credential_name: è il nome della credenziale creata nel passo precedente. Il parametro credential_name deve essere conforme alle convenzioni di denominazione degli oggetti Oracle. Per ulteriori informazioni, vedere Regole di denominazione degli oggetti del database.

    • file_uri_list: è una lista delimitata da virgole dei file di origine che si desidera caricare.

    • format: definisce le opzioni che è possibile specificare per descrivere il formato del file di origine. Le opzioni di formato characterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrays sono supportate per il caricamento dei dati JSON. Eventuali altri formati specificati genereranno un errore.

      Se i dati nei file di origine sono cifrati, decifrare i dati specificando il parametro format con l'opzione encryption. Per ulteriori informazioni sulla decifrazione dei dati, vedere Decifra dati durante l'importazione dallo storage degli oggetti.

      Per ulteriori informazioni, vedere DBMS_CLOUD Opzioni formato pacchetto.

    In questo esempio, namespace-string è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Per informazioni dettagliate sui parametri, vedere COPY_COLLECTION Procedura.

Il caricamento di fruit_array.json, con DBMS_CLOUD.COPY_COLLECTION che utilizza l'opzione di formato unpackarrays, riconosce i valori di array nell'origine e invece di caricare i dati come un singolo documento, come per impostazione predefinita, i dati vengono caricati nella raccolta fruit2 con ogni valore nell'array come un singolo documento.