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 in 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 illustrato 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>
  • Copia il file JSON nell'area di memorizzazione degli oggetti. Ad esempio, il comando CLI OCI seguente 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 un formato cifrato. È possibile utilizzare qualsiasi nome per il nome della credenziale. Tenere presente che questo passo è obbligatorio 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 credenziale per caricare tutti i documenti.

    Per informazioni dettagliate sui parametri, vedere CREATE_CREDENTIAL Procedure.

    Nota

    Alcuni strumenti come SQL*Plus e SQL Developer utilizzano il carattere e commerciale (&) come carattere speciale. Se si dispone del carattere e commerciale nella password, utilizzare il comando SET DEFINE OFF in tali strumenti come mostrato nell'esempio per disabilitare il carattere speciale e ottenere la credenziale creata correttamente.
  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 si carica un singolo valore JSON che occupa l'intero file, quindi 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. Per questo esempio, per indicare che non esiste un delimitatore, il carattere di controllo 0x01 (SOH) è impostato per caricare i documenti JSON in una raccolta. Pertanto, si specifica un valore per recorddelimiter che non si verifica nel file JSON. Ad esempio, è possibile utilizzare il valore "0x''01''" perché questo carattere non si verifica 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 intero array. Il disimballaggio degli elementi di array è tuttavia limitato a un singolo livello. Se nei documenti sono presenti array nidificati, tali array non vengono decompressi.

    Di seguito sono riportati i parametri disponibili.

    • collection_name: è il nome della raccolta di destinazione.

    • credential_name: indica 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 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. Qualsiasi altro formato specificato genererà un errore.

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

      Per ulteriori informazioni, vedere DBMS_CLOUD Package Format Options.

    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 Procedure.

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.