MongoDB JSONファイルからOracle NoSQL Databaseへの移行
この例では、Oracle NoSQL Database Migratorを使用して、MongoDB形式のデータをOracle NoSQL Databaseにコピーする方法を示します。
ユースケース
複数のオプションを評価した後、組織はOracle NoSQL DatabaseをNoSQL Databaseプラットフォームとして最終決定します。表とデータはMongoDBにあり、組織は両方をOracle NoSQL Databaseに移行する必要があります。
ソース構成テンプレートでファイルまたはディレクトリを指定することで、MongoDBからエクスポートした移行用のJSONデータを含むファイルまたはディレクトリをコピーできます。
このユースケースを示すためのMongoDBからエクスポートされた次の2つのサンプルJSONファイルについて考えてみます。
{"_id":0,"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
{"_id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}
{"_id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}
{"_id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}
{"_id":4,"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}
{"_id":{"$oid":"63d3a87cf564fc21dac3838d"},"firstName":"John","lastName":"Smith","address":{"Country":"France"},"_class":"com.example.demo.Customer"}
{"_id":{"$oid":"63d3a87cf564fc21dac3838e"},"firstName":"Sam","lastName":"David","address":{"Country":"USA"},"_class":"com.example.demo.Customer"}
{"_id":"3","firstName":"Dona","lastName":"William","address":{"Country":"England"},"_class":"com.example.demo.Customer"}MongoDBは、標準モードおよび緩和モードの2種類の拡張をフォーマットされたJSONファイルに対してサポートしています。mongoexportツールを使用して正規モードまたは緩和モードで生成されるMongoDB形式のJSONファイルを指定できます。NoSQL Database Migratorでは、両方のモードがサポートされています。
MongoDB Extended JSON (v2)ファイルの詳細は、mongoexport_formatsを参照してください。
MongoDB形式のJSONファイルの生成の詳細は、mongoexportを参照してください。
例
このデモでは、MongoDB形式のJSONファイルをOracle NoSQL Databaseに移行する方法について説明します。この例では、手動で作成した構成ファイルを使用します。- 移行するソースとシンクを指定します。
- ソース: MongoDB形式のJSONファイル
- シンク: Oracle NoSQL Database
- mongoexportユーティリティを使用して、MongoDBからデータを抽出します。詳細は、mongoexportを参照してください。
MongoDB形式のJSONデータをOracle NoSQL Databaseに移行するには、次のいずれかのオプションを選択できます:
-
識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレート およびシンク構成テンプレート を参照してください。
ここでは、defaultSchema構成パラメータをtrueに設定します。このため、NoSQL Database Migratorは、シンクにデフォルト・スキーマで表を作成します。{ "source" : { "type" : "file", "format" : "mongodb_json", "dataPath" : "<complete/path/to/the/MongoDB/Formatted/JSON/file>" }, "sink" : { "type" : "nosqldb", "storeName" : "kvstore", "helperHosts" : ["phoenix126166:5000"], "table" : "mongoImport", "includeTTL" : true, "schemaInfo" : { "defaultSchema" : true }, "overwrite" : true, "requestTimeoutMs" : 5000 }, "abortOnError" : true, "migratorVersion" : "1.7.0" }MongoDB形式のJSONファイル・ソースのデフォルト・スキーマは次のとおりです:CREATE TABLE IF NOT EXISTS <tablename>(id STRING, document JSON,PRIMARY KEY(SHARD(id));説明:tablename= 構成のtable属性に指定された値。id= MongoDBでエクスポートされたJSONソース・ファイルの各ドキュメントの_id値。document= MongoDBでエクスポートされたファイル内のドキュメントごとに、_idフィールドを除く内容がdocument列に集約されます。
ノート:
<tablename>表がOracle NoSQL Databaseにすでに存在し、defaultSchema構成を使用して表にデータを移行する場合は、既存の表に小文字(id)のID列があり、型がSTRINGであることを確認する必要があります。 -
コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを展開したディレクトリに移動します。
-
構成ファイルを渡して、
runMigratorコマンドを実行します。--configまたは-cオプションを使用します。$./runMigrator --config <complete/path/to/the/JSON/config/file> -
次に示すように、ユーティリティはデータの移行に進みます。
creating source from given configuration: source creation completed creating sink from given configuration: sink creation completed creating migrator pipeline [nosqldb sink] : start loading DDLs [nosqldb sink] : executing DDL: CREATE TABLE IF NOT EXISTS mongoImport (id STRING, document JSON, PRIMARY KEY(SHARD(id))) [nosqldb sink] : completed loading DDLs migration started Start writing data to OnDB Sink executing for source:mongoDBSample [mongo file source] : start parsing MongoDB JSON records from file: mongoDBSample.json Writing data to OnDB Sink completed. migration completed. Records provided by source=5, Records written to sink=5, Records failed=0,Records skipped=0. Elapsed time: 0min 0sec 108ms Migration completed.
確認
java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstoremongoImport表がソース・データで作成されていることを確認します:
sql-> select * from mongoImport;
{"id":"4","document":{"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}}
{"id":"1","document":{"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}}
{"id":"2","document":{"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}}
{"id":"3","document":{"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}}
{"id":"0","document":{"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}}
5 rows returned
-
識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレート およびシンク構成テンプレート を参照してください。
ここでは、ソース構成テンプレートの
schemaPathパラメータで、シンク表のDDL文を含むファイルを指定します。それに応じて、シンク構成テンプレートのuseSourceSchema構成パラメータをtrueに設定します。カスタム・スキーマは次のように生成できます:
- MongoDB形式のJSONデータからの各列の名前とデータ型に注意してください。この情報を使用して、Oracle NoSQL Database表のスキーマDDLファイルを作成します。
- スキーマ・ファイルで、最初の列(主キー)に
idという名前を付け、INTEGER型にします。残りの列として、MongoDB形式のJSONファイルに記録されているとおりの同じ名前と型を含めます。 - スキーマ・ファイルを保存し、完全なパスをメモします。
この例では、次のユーザー定義スキーマが使用されています:CREATE TABLE IF NOT EXISTS sampleMongoDBImp (id INTEGER, name STRING, scores JSON, PRIMARY KEY(SHARD(id)));表の作成時に_id列をidに変換するようにNoSQL Database Migratorに指示するrenameFields変換を含める必要があります。パラメータの詳細は、「変換構成テンプレート」を参照してください。NoSQL Database Migratorは、シンクにカスタム・スキーマで表を作成します。{ "source" : { "type" : "file", "format" : "mongodb_json", "schemaInfo" : { "schemaPath" : "<complete/path/to/the/schema/file>" }, "dataPath" : "<complete/path/to/the/MongoDB/Formatted/JSON/file>" }, "sink" : { "type" : "nosqldb", "storeName" : "kvstore", "helperHosts" : ["phoenix126166:5000"], "table" : "sampleMongoDBImp", "includeTTL" : true, "schemaInfo" : { "useSourceSchema" : true }, "overwrite" : false, "requestTimeoutMs" : 5000 }, "transforms": { "renameFields" : { "_id":"id" } }, "abortOnError" : true, "migratorVersion" : "1.7.0" } -
コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを展開したディレクトリに移動します。
-
構成ファイルを渡して、
runMigratorコマンドを実行します。--configまたは-cオプションを使用します。$./runMigrator --config <complete/path/to/the/JSON/config/file> -
次に示すように、ユーティリティはデータの移行に進みます。
creating source from given configuration: source creation completed creating sink from given configuration: sink creation completed creating migrator pipeline [nosqldb sink] : start loading DDLs [nosqldb sink] : executing DDL: CREATE TABLE IF NOT EXISTS sampleMongoDBImp (id INTEGER, name STRING, scores JSON, PRIMARY KEY(SHARD(id))) [nosqldb sink] : completed loading DDLs migration started Start writing data to OnDB Sink executing for source:mongoDBSample [mongo file source] : start parsing MongoDB JSON records from file: mongoDBSample.json Writing data to OnDB Sink completed. migration completed. Records provided by source=5, Records written to sink=5, Records failed=0,Records skipped=0. Elapsed time: 0min 0sec 72ms Migration completed.
確認
java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstoresampleMongoDBImp表がソース・データで作成されていることを確認します:sql-> select * from sampleMongoDBImp;
{"id":0,"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
{"id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}
{"id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}
{"id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}
{"id":4,"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}
5 rows returnedJSONコレクションは、データベース内の複数のJSONドキュメントを格納および管理するように設計されています。固定スキーマを必要とせず、各ドキュメントに独自の柔軟な構造を持たせることができます。この例では、MongoDB形式のJSONファイルをJSONコレクションに移行する方法を示します。
-
識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレート およびシンク構成テンプレート を参照してください。
Oracle NoSQL DatabaseでJSONコレクション表を作成する場合は、スキーマ内の入力のMongoDB形式のJSONに従って、主キーとその型のみを定義する必要があります。他のすべての属性は、JSONドキュメントの一部として格納されるため、スキーマ・ファイルに明示的に定義する必要はありません。
この例では、次のユーザー定義スキーマが使用されています:
CREATE TABLE IF NOT EXISTS sampleMongoDBJSONCollection (id INTEGER, PRIMARY KEY(SHARD(id))) AS JSON COLLECTION表の作成時に、
_id列をidに変換するようにNoSQL Database Migratorに指示するrenameFields変換を含める必要があります。パラメータの詳細は、「変換構成テンプレート」を参照してください。NoSQL Database Migratorは、シンクにカスタム・スキーマで表を作成します。{ "source" : { "type" : "file", "format" : "mongodb_json", "schemaInfo" : { "schemaPath" : "<complete/path/to/schema/file>" }, "dataPath" : "</complete/path/to/the/MongoDB/Formatted/JSON/file>" }, "sink" : { "type" : "nosqldb", "storeName" : "kvstore", "helperHosts" : ["<localhost:5000>"], "table" : "sampleMongoDBJSONCollection", "includeTTL" : true, "schemaInfo" : { "useSourceSchema" : true }, "overwrite" : false, "requestTimeoutMs" : 5000 }, "transforms" : { "renameFields" : { "_id" : "id" } }, "abortOnError" : true, "migratorVersion" : "1.7.0" } - コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを抽出したディレクトリに移動します。
- 構成ファイルを渡して、
runMigratorコマンドを実行します。--configまたは-cオプションを使用します。./runMigrator --config <complete/path/to/the/JSON/config/file> - 次に示すように、ユーティリティはデータの移行に進みます。
[INFO] creating source from given configuration: [INFO] source creation completed [INFO] creating sink from given configuration: [INFO] sink creation completed [INFO] creating migrator pipeline [INFO] [nosqldb sink] : start loading DDLs [INFO] [nosqldb sink] : executing DDL: CREATE TABLE IF NOT EXISTS sampleMongoDBJSONCollection (id INTEGER, PRIMARY KEY(SHARD(id))) AS JSON COLLECTION [nosqldb sink] : completed loading DDLs [INFO] migration started [INFO] Start writing data to OnDB Sink [INFO] executing for source:mongo_json [mongo file source] : start parsing MongoDB JSON records from file: mongo_json.json [INFO] Writing data to OnDB Sink completed. [INFO] migration completed. Records provided by source=5, Records written to sink=5, Records failed=0,Records skipped=0. Elapsed time: 0min 0sec 122ms Migration completed.
確認
KVStoreでSQLプロンプトを起動します。
java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstoresampleMongoDBJSONCollection表がソース・データで作成されていることを確認します:
sql-> select * from sampleMongoDBJSONCollection;
{"id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}
{"id":4,"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}
{"id":0,"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
{"id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}
{"id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}
5 rows returned- このユースケースでは、SpringアプリケーションからエクスポートされたMongoDB形式のJSONファイルのサンプルをソースとして使用します。この形式の詳細は、Springデータを参照してください。
-
識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレート およびシンク構成テンプレート を参照してください。
ここでは、ソース構成テンプレートの
schemaPathパラメータで、シンク表のDDL文を含むファイルを指定します。それに応じて、シンク構成テンプレートのuseSourceSchema構成パラメータをtrueに設定します。カスタム・スキーマは次のように生成できます:
- MongoDB形式のJSONデータからの各列の名前とデータ型に注意してください。この情報を使用して、Oracle NoSQL Database表のスキーマDDLファイルを作成します。
- スキーマ・ファイルで、最初の列(主キー)に
idという名前を付け、STRING型にします。残りのフィールドを、Springデータの形式に準拠して、JSON型のkv_json_という名前のフィールドに集約します。詳細は、Springデータ・フレームワークの永続性モデルを参照してください。 - スキーマ・ファイルを保存し、完全なパスをメモします。
この例では、次のユーザー定義スキーマが使用されています:CREATE TABLE IF NOT EXISTS sampleMongoDBSpringImp (id STRING, kv_json_ JSON, PRIMARY KEY(SHARD(id)));前述のSpringデータ・サンプルには、次の変換を含める必要があります:_id列をidに変換するためのrenameFields変換_class列を無視し、シンク表に含めないためのignoreFields変換- 残りのフィールド(
id以外)をJSON型のフィールドに集約するためのaggregateFields変換
パラメータの詳細は、「変換構成テンプレート」を参照してください。NoSQL Database Migratorは、シンクにカスタム・スキーマで表を作成します。{ "source": { "type": "file", "format": "mongodb_json", "schemaInfo": { "schemaPath": "<complete/path/to/the/schema/file>" }, "dataPath": "<complete/path/to/the/MongoDB/Formatted/JSON/file>" }, "sink": { "type": "nosqldb", "storeName": "kvstore", "helperHosts": ["phoenix126166:5000"], "table": "sampleMongoDBSpringImp", "includeTTL": true, "schemaInfo": { "useSourceSchema": true }, "overwrite": false, "requestTimeoutMs": 5000 }, "transforms": { "renameFields": { "_id": "id" }, "ignoreFields": [ "_class" ], "aggregateFields": { "fieldName": "kv_json_", "skipFields": ["id"] } }, "abortOnError": true, "migratorVersion" : "1.7.0" } -
コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを展開したディレクトリに移動します。
-
構成ファイルを渡して、
runMigratorコマンドを実行します。--configまたは-cオプションを使用します。$./runMigrator --config <complete/path/to/the/JSON/config/file> -
次に示すように、ユーティリティはデータの移行に進みます。
creating source from given configuration: source creation completed creating sink from given configuration: sink creation completed creating migrator pipeline [nosqldb sink] : start loading DDLs [nosqldb sink] : executing DDL: CREATE TABLE IF NOT EXISTS sampleMongoDBSpringImp (id STRING, kv_json_ JSON, PRIMARY KEY(SHARD(id))) [nosqldb sink] : completed loading DDLs migration started Start writing data to OnDB Sink executing for source:onpremisesample [mongo file source] : start parsing MongoDB JSON records from file: onpremisesample.json Writing data to OnDB Sink completed. migration completed. Records provided by source=3, Records written to sink=3, Records failed=0,Records skipped=0. Elapsed time: 0min 0sec 145ms Migration completed.
確認
java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstoresampleMongoDBSpringImp表がソース・データで作成されていることを確認します:sql-> select * from sampleMongoDBSpringImp;
{"id":"63d3a87cf564fc21dac3838e","kv_json_":{"address":{"Country":"USA"},"firstName":"Sam","lastName":"David"}}
{"id":"63d3a87cf564fc21dac3838d","kv_json_":{"address":{"Country":"France"},"firstName":"John","lastName":"Smith"}}
{"id":"3","kv_json_":{"address":{"Country":"England"},"firstName":"Dona","lastName":"William"}}
3 rows returned