Array von JSON-Dokumenten in eine Collection laden

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

Hinweis

Sie können auch Dokumente aus einem JSON-Array in einer Datei mit SODA for REST in eine Collection 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 }]

Bevor Sie Daten in Autonomous Database laden, kopieren Sie die Daten wie folgt in den Objektspeicher:

  • Erstellen Sie einen Bucket im Objektspeicher. Beispiel: Erstellen Sie einen Oracle Cloud Infrastructure-Objektspeicher-Bucket über den Oracle Cloud Infrastructure Object Storage-Link im ausgewählten Compartment, indem Sie auf Bucket erstellen klicken, oder verwenden Sie ein Befehlszeilentool, 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-Collection mit dem Namen fruit2 in der Datenbank:

  1. Speichern Sie die Zugangsdaten für den Objektspeicher 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 zum Laden aller Dokumente verwenden.

    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 ordnungsgemäß 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 kein Datensatzbegrenzungszeichen angegeben werden muss. Um anzugeben, dass es kein Datensatzbegrenzungszeichen gibt, können Sie ein Zeichen verwenden, das nicht in der Eingabedatei vorkommt. Um in diesem Beispiel anzugeben, dass kein Begrenzungszeichen vorhanden ist, wird das Steuerzeichen 0x01 (SOH) so festgelegt, dass die JSON-Dokumente in eine Collection geladen werden. Daher geben Sie einen Wert für die recorddelimiter an, der nicht in der JSON-Datei vorkommt. Beispiel: Sie können den Wert "0x''01''" verwenden, da dieses Zeichen nicht direkt im JSON-Text vorkommt.

    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.

    Die Parameter sind:

    • collection_name: ist der Name der Zielerfassung.

    • credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden. Der Parameter credential_name muss den Benennungskonventionen von Oracle-Objekten 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 zur Beschreibung des Formats der Quelldatei angegeben werden können. 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.

    Ausführliche 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 die Arraywerte in der Quelle erkannt, und anstatt die Daten wie standardmäßig als einzelnes Dokument zu laden, werden die Daten mit jedem Wert im Array als einzelnes Dokument in die Collection fruit2 geladen.