JSONファイル・ソースからOracle NoSQL Databaseへの移行

この例では、Oracle NoSQL Database Migratorを使用して、JSONファイル・ソースからOracle NoSQL Databaseにデータをコピーする方法を示します。

ユースケース

複数のオプションを評価した後、組織はOracle NoSQL DatabaseをNoSQL Databaseプラットフォームとして最終決定します。ソース・コンテンツがJSONファイル形式であるため、これをOracle NoSQL Databaseに移行する方法を探しています。

この例では、SampleData.jsonというJSONファイルからデータを移行する方法について学習します。runMigratorユーティリティは、事前作成済の構成ファイルを渡して実行します。構成ファイルがランタイム・パラメータとして指定されていない場合、runMigratorユーティリティでは、対話型プロシージャを使用して構成を生成するように求められます。

前提条件

  • 移行するソースとシンクを指定します。
    • ソース: JSONソース・ファイル。

      SampleData.jsonはソース・ファイルです。1行に1つのドキュメントがあり、改行文字で区切られた複数のJSONドキュメントが含まれています。

      {"id":6,"val_json":{"array":["q","r","s"],"date":"2023-02-04T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-03-04T02:38:57.520Z","numfield":30,"strfield":"foo54"},{"datefield":"2023-02-04T02:38:57.520Z","numfield":56,"strfield":"bar23"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":3,"val_json":{"array":["g","h","i"],"date":"2023-02-02T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-02T02:38:57.520Z","numfield":28,"strfield":"foo3"},{"datefield":"2023-02-02T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":7,"val_json":{"array":["a","b","c"],"date":"2023-02-20T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-01-20T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-01-22T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":4,"val_json":{"array":["j","k","l"],"date":"2023-02-03T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-03T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-02-03T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
    • シンク: Oracle NoSQL Database
  • JSONソース・ファイルの次の詳細を特定します。
    • schemaPath: <absolute path to the schema definition file containing DDL statements for the NoSQL table at the sink>

      この例では、DDLファイルはschema_json.DDLです。

      create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY KEY(id));

      Oracle NoSQL Database Migratorには、schemaPathが指定されていない場合、デフォルト・スキーマを使用して表を作成するオプションがあります。詳細は、Oracle NoSQL Database Migratorのワークフローのソースとシンクの識別のトピックを参照してください。

    • Datapath: <absolute path to a file or directory containing the JSON data for migration>
  • オンプレミスKVStoreの次の詳細を指定します。
    • storename: kvstore
    • helperHosts: <hostname>:5000
    • table: Migrate_JSON

手順

JSONソース・ファイルをSampleData.jsonからOracle NoSQL Database Cloud Serviceに移行するには、次を実行します。

  1. 識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレートおよびシンク構成テンプレートを参照してください。
    Generated configuration is:
    {
      "source" : {
        "type" : "file",
        "format" : "json",
        "schemaInfo" : {
          "schemaPath" : "/home/<username>/nosqlMigrator/schema_json.ddl"
        },
        "dataPath" : "/home/<username>/nosqlMigrator/SampleData.json"
      },
      "sink" : {
        "type" : "nosqldb",
        "storeName" : "kvstore",
        "helperHosts" : ["localhost:5000"],
        "table" : "Migrate_JSON",
        "includeTTL" : false,
        "schemaInfo" : {
          "useSourceSchema" : true
        },
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.7.0"
    }
  2. コマンド・プロンプトを開き、Oracle NoSQL Database Migratorユーティリティを抽出したディレクトリに移動します。
  3. --configまたは-cオプションを使用して構成ファイルを渡し、runMigratorコマンドを実行します。
    [~/nosql-migrator-1.7.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. 次に示すように、ユーティリティはデータの移行に進みます。Migrate_JSON表は、schemaPathに指定されたスキーマでシンクに作成されます。
    creating source from given configuration:
    [INFO] source creation completed
    [INFO] creating sink from given configuration:
    [INFO] sink creation completed
    [NFO] creating migrator pipeline
    [INFO] [nosqldb sink] : start loading DDLs
    [nosqldb sink] : executing DDL: create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY KEY(id))
    [INFO] [nosqldb sink] : completed loading DDLs
    [INFO] migration started
    [INFO] Start writing data to OnDB Sink
    [INFO] executing for source:SampleData
    [INFO] [json file source] : start parsing JSON records from file: SampleData.json
    [INFO] Writing data to OnDB Sink completed.
    [INFO] migration completed.
    Records provided by source=4, Records written to sink=4, Records failed=0,Records skipped=0.
    Elapsed time: 0min 0sec 81ms
    Migration completed.

検証

データ・ストアでSQLプロンプトを起動します。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
新しい表がソース・データで作成されていることを確認します。
SELECT * FROM Migrate_JSON
出力:
{"id":7,"val_json":{"array":["a","b","c"],"date":"2023-02-20T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-01-20T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-01-22T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
{"id":3,"val_json":{"array":["g","h","i"],"date":"2023-02-02T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-02T02:38:57.520Z","numfield":28,"strfield":"foo3"},{"datefield":"2023-02-02T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
{"id":4,"val_json":{"array":["j","k","l"],"date":"2023-02-03T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-03T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-02-03T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
{"id":6,"val_json":{"array":["q","r","s"],"date":"2023-02-04T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-03-04T02:38:57.520Z","numfield":30,"strfield":"foo54"},{"datefield":"2023-02-04T02:38:57.520Z","numfield":56,"strfield":"bar23"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}

4 rows returned