Array von JSON-Dokumenten in eine Collection laden

Um Daten aus Collections in der Cloud zu laden, speichern Sie zuerst Ihre Objektspeicherzugangsdaten in Autonomous Database und laden dann mit der PL/SQL-Prozedur DBMS_CLOUD.COPY_COLLECTION Dokumente in eine Collection. In diesem Thema wird erläutert, wie Sie Dokumente aus einem JSON-Array in einer Datei in Ihre Datenbank laden.

Hinweis

Sie können Dokumente auch aus einem JSON-Array in einer Datei mit SODA for REST laden. Siehe Beispieldaten für Bestellungen mit SODA for REST laden.

In diesem Beispiel wird die JSON-Datei fruit_array.json verwendet. Im Folgenden wird der Inhalt der Datei fruit_array.json angezeigt:

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

Vor dem Laden von Daten in Autonomous Database müssen Sie die Daten wie folgt in den Objektspeicher kopieren:

  • Erstellen Sie einen Bucket im Objektspeicher. Beispiel: Erstellen Sie einen Oracle Cloud Infrastructure Object Store-Bucket über den Link "Oracle Cloud Infrastructure Object Storage" im ausgewählten Compartment, indem Sie auf Bucket erstellen klicken, oder verwenden Sie ein Befehlstool wie den folgenden OCI-CLI-Befehl:

    oci os bucket create -name json_bucket -c <compartment id>
  • Kopieren Sie die JSON-Datei in den Objektspeicher. Beispiel: Der folgende OCI-CLI-Befehl kopiert die JSON-Datei fruit_array.json in den Objektspeicher:

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

Laden Sie die JSON-Datei aus dem Objektspeicher in eine SODA-C Collection namens fruit2 in der Datenbank:

  1. Speichern Sie Ihre Objektspeicherzugangsdaten mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL, wie im folgenden Beispiel dargestellt.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    Dieser Vorgang speichert die Zugangsdaten in einem verschlüsselten Format in der Datenbank. Sie können einen beliebigen Namen als Zugangsdatenname verwenden. Beachten Sie, dass dieser Schritt nur einmal erforderlich ist, es sei denn, Ihre Objektspeicherzugangsdaten werden geändert. Nachdem Sie die Zugangsdaten gespeichert haben, können Sie denselben Zugangsdatennamen verwenden, um alle Dokumente zu laden.

    Ausführliche Informationen zu den Parametern finden Sie unter Prozedur CREATE_CREDENTIAL.

    Hinweis

    Einige Tools wie SQL*Plus und SQL Developer verwenden das Et-Zeichen (&) als Sonderzeichen. Wenn das Et-Zeichen in Ihrem Kennwort enthalten ist, verwenden Sie den Befehl SET DEFINE OFF in diesen Tools, wie im Beispiel gezeigt, um das Sonderzeichen zu deaktivieren und die Zugangsdaten korrekt zu erstellen.
  2. Laden Sie die Daten mit der Prozedur DBMS_CLOUD.COPY_COLLECTION in eine 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 diesem Beispiel laden Sie einen einzelnen JSON-Wert, der die gesamte Datei belegt, sodass Sie kein Datensatztrennzeichen angeben müssen. Um anzugeben, dass es kein Datensatzbegrenzungszeichen gibt, können Sie ein Zeichen verwenden, das nicht in der Eingabedatei vorkommt. Um anzugeben, dass kein Trennzeichen vorhanden ist, wird in diesem Beispiel das Steuerzeichen 0x01 (SOH) so festgelegt, dass die JSON-Dokumente in eine Collection geladen werden. Daher geben Sie einen Wert für das recorddelimiter-Zeichen an, das nicht in der JSON-Datei auftritt. Beispiel: Sie können den Wert "0x''01''" verwenden, da dieses Zeichen nicht direkt im JSON-Text angezeigt wird.

    Wenn der Parameter unpackarrays für den Formatwert auf TRUE gesetzt ist, wird das Array von Dokumenten als einzelne Dokumente und nicht als ganzes Array geladen. Das Auspacken von Arrayelementen ist jedoch auf eine einzelne Ebene beschränkt. Wenn verschachtelte Arrays in den Dokumenten vorhanden sind, werden diese Arrays nicht entpackt.

    Parameter:

    • collection_name: Der Name der Zieldatei.

    • credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden. Der Parameter credential_name muss den Benennungskonventionen für Oracle-Objekte entsprechen. Weitere Informationen finden Sie unter Benennungsregeln für Datenbankobjekte.

    • file_uri_list: Eine kommagetrennte Liste der Quelldateien, die Sie laden möchten.

    • format: Definiert die Optionen, die Sie angeben können, um das Format der Quelldatei zu beschreiben. Die Formatoptionen characterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrays werden zum Laden von JSON-Daten unterstützt. Alle anderen angegebenen Formate führen zu einem Fehler.

      Wenn die Daten in den Quelldateien verschlüsselt sind, entschlüsseln Sie die Daten, indem Sie den Parameter format mit der Option encryption angeben. Weitere Informationen zum Entschlüsseln von Daten finden Sie unter Daten beim Importieren aus Object Storage entschlüsseln.

      Weitere Informationen finden Sie unter DBMS_CLOUD Packageformatoptionen.

    In diesem Beispiel ist namespace-string der Oracle Cloud Infrastructure-Objektspeicher-Namespace und bucketname der Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.

    Weitere Informationen zu den Parametern finden Sie unter Prozedur COPY_COLLECTION.

Beim Laden von fruit_array.json mit DBMS_CLOUD.COPY_COLLECTION mit der Formatoption unpackarrays werden Arraywerte in der Quelle erkannt. Anstatt die Daten standardmäßig als einzelnes Dokument zu laden, werden die Daten in die Collection fruit2 mit jedem Wert im Array als einzelnes Dokument geladen.