機械翻訳について

JSONドキュメントの配列のコレクションへのロード

クラウドのコレクションからデータをロードするには、最初にオブジェクト・ストレージ資格証明をAutonomous Databaseに格納してから、PL/SQLプロシージャDBMS_CLOUD.COPY_COLLECTIONを使用してドキュメントをコレクションにロードする必要があります。 このトピックでは、ファイル内のJSON配列からデータベースにドキュメントをロードする方法について説明します。

ノート:

SODA for RESTを使用して、ファイル内のJSON配列からコレクションにドキュメントをロードすることもできます。 「SODA for RESTを使用した発注書サンプル・データのロード」を参照してください。

この例では、JSONファイルfruit_array.jsonを使用します。 ファイルfruit_array.jsonの内容は、次のとおりです:

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

Autonomous Databaseにデータをロードする前に、次のようにデータをオブジェクト・ストアにコピーします:

  • オブジェクト・ストアにバケットを作成します。 たとえば、「バケットの作成」をクリックし、選択したコンパートメント内のOracle Cloud Infrastructureオブジェクト・ストレージ・リンクからOracle Cloud Infrastructureオブジェクト・ストア・バケットを作成するか、次のOCI CLIコマンドなどのコマンドライン・ツールを使用します:

    oci os bucket create -name json_bucket -c <compartment id>
  • JSONファイルをオブジェクト・ストアにコピーします。 たとえば、次のOCI CLIコマンドは、JSONファイルfruit_array.jsonをオブジェクト・ストアにコピーします:

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

JSONファイルをオブジェクト・ストアからデータベース上のfruit2という名前のSODAコレクションにロードします:

  1. 次の例に示すように、プロシージャDBMS_CLOUD.CREATE_CREDENTIALを使用してオブジェクト・ストア資格証明を格納します:
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    この操作では、資格証明がデータベースに暗号化された形式で保存されます。 資格証明名には任意の名前を使用できます。 このステップは、オブジェクト・ストア資格証明が変更されないかぎり、1回のみ実行すれば済みます。 資格証明を格納したら、すべてをドキュメントをロードするために同じ資格証明名を使用できます。

    パラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。

    ノート:

    SQL*PlusやSQL Developerなどのツールの中には、アンパサンド文字(&)を特殊文字として使用するものがあります。 パスワードにアンパサンド文字が含まれる場合、例に示されているとおり、それらのツールでSET DEFINE OFFコマンドを使用して特殊文字を無効化し、資格証明を適切に作成します。
  2. 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;
    /

    この例では、ファイル全体を占有する単一のJSON値をロードするため、レコード・デリミタを指定する必要はありません。 レコード・デリミタがないことを示すために、入力ファイルにない文字を使用できます。 この例では、デリミタがないことを示すために、制御文字0x01 (SOH)を設定してJSONドキュメントをコレクションにロードします。 そのため、JSONファイルに出現しないrecorddelimiterの値を指定します。 たとえば、値"0x''01''"を使用できますが、これは、この文字がJSONテキスト内に直接出現しないためです。

    format値のunpackarraysパラメータがTRUEに設定されている場合、ドキュメントの配列は配列全体としてではなく、個々のドキュメントとしてロードされます。 ただし、配列要素のアンパックは単一レベルに制限されます。 ドキュメント内にネストされた配列がある場合、それらの配列はアンパックされません。

    パラメータは次のとおりです:

    • collection_name: ターゲット・コレクションの名前です。

    • credential_name: 前のステップで作成した資格証明の名前です。 credential_nameパラメータは、Oracleオブジェクトのネーミング規則に準拠している必要があります。 詳細については、「データベース・オブジェクトのネーミング・ルール」を参照してください。

    • file_uri_list: ロードするソース・ファイルのカンマ区切りリストです。

    • format: ソース・ファイルの形式を記述するために指定できるオプションを定義します。 JSONデータのロードでは、フォーマット・オプションcharacterset, compression, encryption, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, type, unpackarraysがサポートされています。 その他のフォーマットを指定すると、エラーが発生します。

      ソース・ファイル内のデータが暗号化されている場合は、encryptionオプションを指定してformatパラメータを指定して、データを復号化します。 データの復号化の詳細は、「オブジェクト・ストレージからのインポート中のデータの復号化」を参照してください。

      詳細は、「DBMS_CLOUDパッケージ形式オプション」を参照してください。

    この例では、namespace-stringはOracle Cloud Infrastructure Object Storageネームスペースで、bucketnameはバケット名です。 詳細は、「オブジェクト・ストレージ・ネームスペースの理解」を参照してください。

    パラメータの詳細は、「COPY_COLLECTIONプロシージャ」を参照してください。

フォーマット・オプションunpackarraysを使用したDBMS_CLOUD.COPY_COLLECTIONを使用したfruit_array.jsonのロードでは、ソース内の配列値が認識され、デフォルトで単一ドキュメントとしてデータをロードするかわりに、データはコレクションfruit2にロードされ、配列の各値が単一のドキュメントとしてロードされます。