Array von JSON-Dokumenten in eine Collection laden
Um Daten aus Collections in der Cloud zu laden, speichern Sie zunächst Ihre Objektspeicherzugangsdaten in der autonomen KI-Datenbank 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
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 die autonome KI-Datenbank 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.jsonin 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 namens fruit2 in Ihrer Datenbank:
-
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
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 BefehlSET DEFINE OFFin diesen Tools, wie im Beispiel gezeigt, um das Sonderzeichen zu deaktivieren und die Zugangsdaten ordnungsgemäß zu erstellen. -
Laden Sie die Daten mit der Prozedur
DBMS_CLOUD.COPY_COLLECTIONin 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 Datensatztrennzeichen 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 eingestellt, dass die JSON-Dokumente in eine Collection geladen werden. Daher geben Sie einen Wert für die
recorddelimiteran, 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
unpackarraysfür den Formatwert aufTRUEgesetzt 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 Zielsammlung. -
credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden. Der Parametercredential_namemuss 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 Formatoptionencharacterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarrayswerden 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
formatmit der Optionencryptionangeben. Weitere Informationen zum Entschlüsseln von Daten finden Sie unter Daten beim Importieren aus Object Storage entschlüsseln.Weitere Informationen finden Sie unter Optionen für DBMS_CLOUD-Packageformat.
In diesem Beispiel ist
namespace-stringder Oracle Cloud Infrastructure-Objektspeicher-Namespace undbucketnameder Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.Ausführliche Informationen über die Parameter 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.