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

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

ユースケース:

複数のオプションを評価した後、組織はDynamoDBデータベースではなくOracle NoSQL Databaseに最終決定しました。その組織は、表およびデータをDynamoDBからOracle NoSQL Databaseに移行する必要があります。

詳細は、「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ファイルをOracle NoSQL Databaseに移行する方法について説明します。この例では、手動で作成した構成ファイルを使用します。

前提条件

  • 移行するソースとシンクを指定します。
    • ソース: AWS S3のDynamoDB JSONファイル
    • シンク: Oracle NoSQL Database
  • Oracle NoSQL Databaseに移行する必要がある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およびシークレット・アクセス・キーを含む)および構成ファイル(資格証明およびオプションで構成)が必要です。構成ファイルの詳細は、構成設定の設定および表示に関する項を参照してください。アクセス・キーの作成の詳細は、キー・ペアの作成に関する項を参照してください。

手順

DynamoDB JSONデータをOracle NoSQL Databaseに移行するには、次のいずれかのオプションを使用します:

  1. 識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。詳細は、「ソース構成テンプレート」「シンク構成テンプレート」を参照してください。

    ノート:

    AWS S3にあるDynamoDB JSONファイル内のアイテムにTTL属性が含まれている場合に、オプションでTTL値をインポートするには、ソース構成テンプレートのttlAttributeName構成パラメータにその属性を指定し、シンク構成テンプレートでincludeTTL構成パラメータをtrueに設定します。詳細は、「表の行のTTLメタデータの移行」を参照してください。
    シンク構成テンプレートで、defaultSchemaTRUEに設定します。Migratorユーティリティは、シンクにデフォルト・スキーマで表を作成します。DDBPartitionKeyおよび対応するNoSQL列タイプを指定する必要があります。そうしないと、エラーがスローされます。
    {
      "source" : {
        "type" : "aws_s3",
        "format" : "dynamodb_json",
        "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
        "credentials" : "</path/to/aws/credentials/file>",
        "credentialsProfile" : "default"
      },
      "sink" : {
        "type" : "nosqldb",
        "storeName" : "kvstore",
        "helperHosts" : ["phoenix126166:5000"],
        "table" : "sampledynDBImp",
        "includeTTL" : false,
        "schemaInfo" : {
          "DDBPartitionKey" : "<PrimaryKey:Datatype>",
          "defaultSchema" : true
        },
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.7.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. コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを展開したディレクトリに移動します。
  3. 構成ファイルを渡して、runMigratorコマンドを実行します。--configまたは-cオプションを使用します。
    [~/nosqlMigrator]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 次に示すように、ユーティリティはデータの移行に進みます。
    
    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 sampledynDBImp (Id INTEGER, document JSON, PRIMARY KEY(SHARD(Id)))
    [nosqldb sink] : completed loading DDLs
    migration started
    Start writing data to OnDB Sink
    executing for source:azkzkyynnq7w7j7yqbao5377he
    executing for source:jrnmvjofnu3bzlwql4cpyasuma
    executing for source:kdieseqlwa72xlaenwgo5vb7tq
    executing for source:wp776cslq46nhm5snsi23v4j3a
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/azkzkyynnq7w7j7yqbao5377he.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/jrnmvjofnu3bzlwql4cpyasuma.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/kdieseqlwa72xlaenwgo5vb7tq.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/wp776cslq46nhm5snsi23v4j3a.json.gz
    [INFO] Writing data to OnDB Sink completed.
    [INFO] migration completed.
    Records provided by source=2, Records written to sink=2, Records failed=0,Records skipped=0.
    Elapsed time: 0min 0sec 747ms
    Migration completed.

確認

KVStoreでSQLプロンプトを起動します。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
sampledynDBImp表がソース・データで作成されていることを確認します:
{"Id":102,"document":{"Address":{"City":"Wales","DoorNum":1024,"Street":"32 main","Zip":560014},"Age":48,"FavColors":["Blue"],"FavNumbers":[10],"FirstName":"John","LastName":"White","Phones":[["222-222"]],"PremierCustomer":false}}
{"Id":101,"document":{"Address":{"City":"London","DoorNum":201,"Street":"21 main","Zip":570004},"Age":22,"FavColors":["Red","Green"],"FavNumbers":[10],"FirstName":"Fred","LastName":"Smith","Phones":[["555-222","123-567"]],"PremierCustomer":false}}
  1. 識別されたソースおよびシンクの詳細を含む構成ファイル(JSON形式)を準備します。詳細は、「ソース構成テンプレート」「シンク構成テンプレート」を参照してください。

    ノート:

    AWS S3にあるDynamoDB JSONファイル内のアイテムにTTL属性が含まれている場合に、オプションでTTL値をインポートするには、ソース構成テンプレートのttlAttributeName構成パラメータにその属性を指定し、シンク構成テンプレートでincludeTTL構成パラメータをtrueに設定します。詳細は、「表の行のTTLメタデータの移行」を参照してください。
    シンク構成テンプレートでユーザー定義スキーマ・ファイルを指定するには、defaultSchemaFALSEを設定し、schemaPathにDDL文を含むファイルを指定します。詳細は、「DynamoDB型からOracle NoSQL型へのマッピング」を参照してください。

    ノート:

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

    ノート:

    • 入力データに(主キー以外の)特定の列の値が含まれていない場合は、列のデフォルト値が使用されます。デフォルト値は、表の作成時に列定義の一部である必要があります。たとえば、id INTEGER not null default 0です。列にデフォルト定義がない場合、列に値が指定されていないと、SQL NULLが挿入されます。
    • DynamoDB表をJSONドキュメントとしてモデル化する場合は、主キー以外のデータをJSON列に集計するために、AggregateFields変換を使用してください。詳細は、「aggregateFields」を参照してください。
    {
      "source" : {
        "type" : "aws_s3",
        "format" : "dynamodb_json",
        "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
        "credentials" : "</path/to/aws/credentials/file>",
        "credentialsProfile" : "default"
      },
      "sink" : {
        "type" : "nosqldb",
        "storeName" : "kvstore",
        "helperHosts" : ["phoenix126166:5000"],
        "table" : "sampledynDBImp",
        "includeTTL" : false,
        "schemaInfo" : {
          "schemaPath" : "<full path of the schema file with the DDL statement>"
        },
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "transforms" : {
        "aggregateFields" : {
          "fieldName" : "document",
          "skipFields" : ["AccountId"]
        }
      },
      "abortOnError" : true,
      "migratorVersion" : "1.7.0"
    }
  2. コマンド・プロンプトを開き、NoSQL Database Migratorユーティリティを展開したディレクトリに移動します。
  3. 構成ファイルを渡して、runMigratorコマンドを実行します。--configまたは-cオプションを使用します。
    [~/nosqlMigrator]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 次に示すように、ユーティリティはデータの移行に進みます。
    
    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 sampledynDBImp (AccountId INTEGER, document JSON, PRIMARY KEY(SHARD(AccountId)))
    [nosqldb sink] : completed loading DDLs
    migration started
    Start writing data to OnDB Sink
    executing for source:azkzkyynnq7w7j7yqbao5377he
    executing for source:jrnmvjofnu3bzlwql4cpyasuma
    executing for source:kdieseqlwa72xlaenwgo5vb7tq
    executing for source:wp776cslq46nhm5snsi23v4j3a
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/azkzkyynnq7w7j7yqbao5377he.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/jrnmvjofnu3bzlwql4cpyasuma.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/kdieseqlwa72xlaenwgo5vb7tq.json.gz
    [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01754372757879-92f376b3/data/wp776cslq46nhm5snsi23v4j3a.json.gz
    [INFO] Writing data to OnDB Sink completed.
    [INFO] migration completed.
    Records provided by source=2, Records written to sink=2, Records failed=0,Records skipped=0.
    Elapsed time: 0min 0sec 747ms
    Migration completed.

確認

KVStoreでSQLプロンプトを起動します。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
sampledynDBImp表がソース・データで作成されていることを確認します:
{"AccountId":102,"document":{"Address":{"City":"Wales","DoorNum":1024,"Street":"32 main","Zip":560014},"Age":48,"FavColors":["Blue"],"FavNumbers":[10],"FirstName":"John","LastName":"White","Phones":[["222-222"]],"PremierCustomer":false}}
{"AccountId":101,"document":{"Address":{"City":"London","DoorNum":201,"Street":"21 main","Zip":570004},"Age":22,"FavColors":["Red","Green"],"FavNumbers":[10],"FirstName":"Fred","LastName":"Smith","Phones":[["555-222","123-567"]],"PremierCustomer":false}}