AWS S3のDynamoDB JSONファイルからOracle NoSQL Database Cloud Serviceへの移行

この例では、Oracle NoSQL Database Migratorを使用して、AWS S3ストアに格納されているDynamoDB JSONファイルをOracle NoSQL Database Cloud Service (NDCS)にコピーする方法を示します。

ユースケース:

複数のオプションを評価した後、組織はDynamoDBデータベースを介してOracle NoSQL Database Cloud Serviceを最終決定します。組織は、表およびデータをDynamoDBからOracle NoSQL Database Cloud Serviceに移行しようとしています。

詳細は、「DynamoDB表からOracle NoSQL表へのマッピング」 を参照してください。

ソース構成テンプレートでパスを指定することで、DynamoDBエクスポートされたJSONデータを含むファイルをAWS S3ストレージから移行できます。

DynamoDB形式のJSONファイルの例を次に示します。
{"Item":{"Id":{"N":"101"},"Phones":{"L":[{"L":[{"S":"555-222"},{"S":"123-567"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"570004"},"Street":{"S":"21 main"},"DoorNum":{"N":"201"},"City":{"S":"London"}}},"FirstName":{"S":"Fred"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"Smith"},"FavColors":{"SS":["Red","Green"]},"Age":{"N":"22"}}}
{"Item":{"Id":{"N":"102"},"Phones":{"L":[{"L":[{"S":"222-222"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"560014"},"Street":{"S":"32 main"},"DoorNum":{"N":"1024"},"City":{"S":"Wales"}}},"FirstName":{"S":"John"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"White"},"FavColors":{"SS":["Blue"]},"Age":{"N":"48"}}}

DynamoDB表をAWS S3ストレージにエクスポートするには、「Amazon S3へのDynamoDB表データのエクスポート」に記載された方法に従います。

次に例を示します。

このデモでは、AWS S3ソースのDynamoDB JSONファイルをNDCSに移行する方法について学習します。この例では、手動で作成した構成ファイルを使用します。

前提条件

  • 移行するソースとシンクを指定します。
    • ソース: AWS S3のDynamoDB JSONファイル
    • シンク: Oracle NoSQL Database Cloud Service
  • NDCSに移行する必要があるAWS DynamoDBの表を特定します。資格証明を使用してAWSコンソールにログインします。DynamoDBに移動します。「Tables」で、移行する表を選択します。
  • オブジェクト・バケットを作成し、表をS3にエクスポートします。AWSコンソールから、S3に移動します。バケットの下に、新しいオブジェクト・バケットを作成します。DynamoDBに戻り、「Exports to S3」をクリックします。ソース表および宛先のS3バケットを指定して、「Export」をクリックします。
    表をエクスポートするには、Amazon S3へのDynamoDB表のエクスポートに関する項のステップを参照してください。エクスポート時に、DynamoDB JSONとして形式を選択します。エクスポートされたデータには、次に示すように、複数のgzipファイルにDynamoDB表データが含まれています。
    / 01639372501551-bb4dd8c3 
    |-- 01639372501551-bb4dd8c3 ==> exported data prefix
    |----data
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data
    |----manifest-files.json
    |----manifest-files.md5
    |----manifest-summary.json
    |----manifest-summary.md5
    |----_started
  • マイグレータからAWS S3にアクセスするには、AWS資格証明(アクセス・キーIDおよびシークレット・アクセス・キーを含む)および構成ファイル(資格証明およびオプションで構成)が必要です。構成ファイルの詳細は、構成設定の設定および表示に関する項を参照してください。アクセス・キーの作成の詳細は、キー・ペアの作成に関する項を参照してください。
  • OCIクラウド資格証明を指定し、OCI構成ファイルで取得します。構成ファイルをホーム・ディレクトリ(~/.oci/config)の下の.ociディレクトリに保存します。詳細は、資格証明の取得に関する項を参照してください。
    [DEFAULT]              
    tenancy=ocid1.tenancy.oc1....         
    user=ocid1.user.oc1....         
    fingerprint= 43:d1:....         
    key_file=</fully/qualified/path/to/the/private/key/>              
    pass_phrase=<passphrase>
  • Oracle NoSQL Databaseのリージョン・エンドポイントおよびコンパートメント名を指定します。たとえば、次のようになります。
    • endpoint: us-phoenix-1
    • compartment: developers

手順

DynamoDB JSONデータをOracle NoSQL Databaseに移行するには:
  1. 識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。ソース構成テンプレート およびシンク構成テンプレート を参照してください。
    次の2つのオプションのいずれかを選択できます。
    • オプション1: デフォルトのスキーマ構成を使用して、DynamoDB表をJSONドキュメントとしてインポートします。
      ここで、defaultSchemaTRUEであるため、マイグレータはシンクにデフォルトのスキーマを作成します。DDBPartitionKeyおよび対応するNoSQL列タイプを指定する必要があります。それ以外の場合は、エラーがスローされます。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : true,
            "readUnits" : 100,
            "writeUnits" : 60,
            "DDBPartitionKey" : "<PrimaryKey:Datatype>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
      DynamoDB JSONソースの場合、表のデフォルト・スキーマは次のようになります:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type], DOCUMENT JSON, 
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      説明

      TABLE_NAME = 構成内のシンクのtableに指定された値

      DDBPartitionKey_name = 構成のパーティション・キーに指定された値

      DDBPartitionKey_type = 構成内のパーティション・キーのデータ型に指定された値

      DDBSortKey_name = 構成のソート・キーに指定された値(ある場合)

      DDBSortKey_type = 構成内のソート・キーのデータ型に指定された値(ある場合)

      DOCUMENT = NoSQL JSON列に集計されたDynamo DB表アイテムのパーティションおよびソート・キーを除くすべての属性

    • オプション2: ユーザー指定のスキーマ・ファイルを使用して、DynamoDB表を固定列としてインポートします。
      defaultSchemaFALSEで、DDL文を含むファイルとしてschemaPathを指定します。詳細は、「DynamoDB型からOracle NoSQL型へのマッピング」 を参照してください。

      ノート:

      Dynamo DB表にNoSQLでサポートされていないデータ型がある場合、移行は失敗します。
      サンプル・スキーマ・ファイルを次に示します。
      CREATE TABLE IF NOT EXISTS sampledynDBImp (AccountId INTEGER,document JSON, 
      PRIMARY KEY(SHARD(AccountId)));
      スキーマ・ファイルは、移行の一部としてシンクに表を作成するために使用されます。主キー・データが指定されているかぎり、入力JSONレコードが挿入され、それ以外の場合はエラーがスローされます。

      ノート:

      入力データに(主キー以外の)特定の列の値が含まれていない場合は、列のデフォルト値が使用されます。デフォルト値は、表の作成時に列定義の一部である必要があります。たとえば、id INTEGER not null default 0です。列にデフォルト定義がない場合、列に値が指定されていないと、SQL NULLが挿入されます。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : false,
            "readUnits" : 100,
            "writeUnits" : 60,
            "schemaPath" : "<full path of the schema file with the DDL statement>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
  2. コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを抽出したディレクトリに移動します。
  3. --configまたは-cオプションを使用して構成ファイルを渡し、runMigratorコマンドを実行します。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 次に示すように、ユーティリティはデータの移行に進みます。
    Records provided by source=7..,
    Records written to sink=7,
    Records failed=0,
    Records skipped=0.
    Elapsed time: 0 min 2sec 50ms
    Migration completed.

検証

NDCSコンソールにログインし、ソース・データを使用して新しい表が作成されていることを確認します。