メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

DynamoDB と Amazon S3 間のデータのコピー

DynamoDB テーブルにデータが存在する場合は、Hive を使用して Amazon S3 バケットにデータをコピーできます。

DynamoDB テーブルのデータのアーカイブを作成する場合、これを行う場合があります。たとえば、DynamoDB の一連のベースラインテストデータを使用する必要のあるテスト環境があるとします。ベースラインデータを Amazon S3 バケットにコピーでき、それからテストを実行します。その後、ベースラインデータを Amazon S3 バケットから DynamoDB に復元して、テスト環境をリセットできます。

チュートリアル: Amazon DynamoDB および Apache Hive の使用 を完了している場合、既に Amazon EMR ログを含む Amazon S3 バケットがあります。バケットのルートパスが分かっている場合は、このセクションの例では、このバケットを使用します。

  1. Amazon EMR コンソール (https://console.aws.amazon.com/elasticmapreduce/) を開きます。

  2. [Name] には、クラスターを選択します。

  3. URI は、[設定の詳細] の [Log URI] に一覧表示されます。

  4. バケットのルートパスを書きとめておきます。命名規則は次のとおりです。

    s3://aws-logs-accountID-region

    accountID が、AWS アカウント ID であり、リージョンがバケットの AWS リージョンである場合です。

注記

これらの例では、この例のように、バケット内のサブパスを使用します。

s3://aws-logs-123456789012-us-west-2/hive-test

次の手順は、チュートリアルのステップに従ったこと、DynamoDB (ddb_features) でマスターされている外部テーブルがあることを前提にしています。

Hive のデフォルト形式を使用してデータをコピーする

例 DynamoDB から Amazon S3 へ

INSERT OVERWRITE ステートメントを使用して Amazon S3 に直接書き込みます。

Copy
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;

Amazon S3 のデータファイルは次のようになります。

Copy
920709^ASoldiers Farewell Hill^ASummit^ANM^A32.3564729^A-108.33004616135 1178153^AJones Run^AStream^APA^A41.2120086^A-79.25920781260 253838^ASentinel Dome^ASummit^ACA^A37.7229821^A-119.584338133 264054^ANeversweet Gulch^AValley^ACA^A41.6565269^A-122.83614322900 115905^AChacaloochee Bay^ABay^AAL^A30.6979676^A-87.97388530

各フィールドは SOH 文字 (ヘッダーの開始、0x01) で区切ります。ファイルで、SOH は ^A と表示されます。

例 Amazon S3 から DynamoDB へ

  1. Amazon S3 の未フォーマットデータをポイントする外部テーブルを作成します。

    Copy
    CREATE EXTERNAL TABLE s3_features_unformatted (feature_id BIGINT, feature_name STRING , feature_class STRING , state_alpha STRING, prim_lat_dec DOUBLE , prim_long_dec DOUBLE , elev_in_ft BIGINT) LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  2. データを DynamoDB にコピーします。

    Copy
    INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;

ユーザー指定の形式でのデータのコピー

独自のフィールド区切り文字を指定する場合は、Amazon S3 バケットにマッピングされる外部テーブルを作成できます。カンマ区切り値 (CSV) を使用したデータファイルを作成するためにこの手法を使用する場合があります。

例 DynamoDB から Amazon S3 へ

  1. Amazon S3. にマッピングする Hive 外部テーブルを作成します。これを行うとき、データ型が、DynamoDB 外部テーブルのデータ型に準拠していることを確認します。

    Copy
    CREATE EXTERNAL TABLE s3_features_csv (feature_id BIGINT, feature_name STRING, feature_class STRING, state_alpha STRING, prim_lat_dec DOUBLE, prim_long_dec DOUBLE, elev_in_ft BIGINT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  2. DynamoDB からデータをコピーします。

    Copy
    INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;

Amazon S3 のデータファイルは次のようになります。

Copy
920709,Soldiers Farewell Hill,Summit,NM,32.3564729,-108.3300461,6135 1178153,Jones Run,Stream,PA,41.2120086,-79.2592078,1260 253838,Sentinel Dome,Summit,CA,37.7229821,-119.58433,8133 264054,Neversweet Gulch,Valley,CA,41.6565269,-122.8361432,2900 115905,Chacaloochee Bay,Bay,AL,30.6979676,-87.9738853,0

例 Amazon S3 から DynamoDB へ

単一の HiveQL ステートメントを使用すると、Amazon S3 からのデータを使用して DynamoDB テーブルに入力できます。

Copy
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;

列のマッピングなしでのデータのコピー

RAW 形式で DynamoDB からデータをコピーし、データ型または列マッピングを指定しないで Amazon S3 に書き込めます。この方法を使用すると、DynamoDB データのアーカイブを作成して、Amazon S3 に保存できます。

注記

DynamoDB テーブルに Map 型、List、Boolean、または Null の属性が含まれる場合、この方法でのみ Hive を使用してデータを DynamoDB から Amazon S3 へコピーできます。

例 DynamoDB から Amazon S3 へ

  1. DynamoDB テーブルに関連付けられる外部テーブルを作成します。(この HiveQL ステートメントには dynamodb.column.mapping はありません。)

    Copy
    CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
  2. Amazon S3 バケットに関連付けられた別の外部テーブルを作成します。

    Copy
    CREATE EXTERNAL TABLE s3_features_no_mapping (item MAP<STRING, STRING>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  3. DynamoDB から Amazon S3 へデータをコピーします。

    Copy
    INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;

Amazon S3 のデータファイルは次のようになります。

Copy
Name^C{"s":"Soldiers Farewell Hill"}^BState^C{"s":"NM"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"6135"}^BLatitude^C{"n":"32.3564729"}^BId^C{"n":"920709"}^BLongitude^C{"n":"-108.3300461"} Name^C{"s":"Jones Run"}^BState^C{"s":"PA"}^BClass^C{"s":"Stream"}^BElevation^C{"n":"1260"}^BLatitude^C{"n":"41.2120086"}^BId^C{"n":"1178153"}^BLongitude^C{"n":"-79.2592078"} Name^C{"s":"Sentinel Dome"}^BState^C{"s":"CA"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"8133"}^BLatitude^C{"n":"37.7229821"}^BId^C{"n":"253838"}^BLongitude^C{"n":"-119.58433"} Name^C{"s":"Neversweet Gulch"}^BState^C{"s":"CA"}^BClass^C{"s":"Valley"}^BElevation^C{"n":"2900"}^BLatitude^C{"n":"41.6565269"}^BId^C{"n":"264054"}^BLongitude^C{"n":"-122.8361432"} Name^C{"s":"Chacaloochee Bay"}^BState^C{"s":"AL"}^BClass^C{"s":"Bay"}^BElevation^C{"n":"0"}^BLatitude^C{"n":"30.6979676"}^BId^C{"n":"115905"}^BLongitude^C{"n":"-87.9738853"}

各フィールドは STX 文字 (テキスト開始 0x02) で始まり ETX 文字 (テキスト終了 0x03) で終わります。ファイルで、STX は ^B、ETX は ^C と表示されます。

例 Amazon S3 から DynamoDB へ

単一の HiveQL ステートメントを使用すると、Amazon S3 からのデータを使用して DynamoDB テーブルに入力できます。

Copy
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;

Amazon S3 のデータを表示する

SSH を使用してマスターノードに接続する場合、AWS Command Line Interface (AWS CLI) を使用して、Hive が Amazon S3 に 書き込んだデータにアクセスできます。

次のステップは、このセクションの手順の 1 つを使用して DynamoDB から Amazon S3 にデータをコピーしたことを前提にしています。

  1. 現在 Hive コマンドプロンプトである場合は、Linux コマンドプロンプトに戻ります。

    Copy
    hive> exit;
  2. Amazon S3 バケットで Hive テストディレクトリのコンテンツを一覧表示します。(これは、Hive が DynamoDB からデータをコピーした場所です。)

    Copy
    aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/

    レスポンスは以下のようになります。

    2016-11-01 23:19:54 81983 000000_0

    ファイル名 (000000_0) は、システムで生成されます。

  3. (オプション) Amazon S3 から マスターノードのローカルファイルシステムにデータファイルをコピーできます。その後、ファイルのデータを運用するために Linux 標準コマンドラインユーティリティを使用できます。

    Copy
    aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .

    レスポンスは以下のようになります。

    download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0

    注記

    マスターノードのローカルファイルシステムは容量が限定されています。ローカルファイルシステムで利用可能なスペースより大きなファイルでこのコマンドを使用しないでください。