[AWS]DynamoDBとRedshiftでデータのやり取り

2013.06.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DynamoとRedshift

前回はS3とRedshiftでデータのやり取りを行いました。
S3と同じように、DynamoでもRedshiftとの連携が可能です。
今回はDynamoからRedshiftへのデータ移行を試してみましょう。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • Node.js : v0.10.8

Redshiftクラスタやnodeのpgモジュールは前回を参考にセットアップしておいてください。

Dynamoからデータをロードし、Redshiftへ登録

Redshiftにテーブルを作成

まずは準備をしましょう。前回と同じく、RedshiftにDynamo用テーブルを作成します。
下記のようなプログラムで作成しましょう。(postgres用クライアントで接続して作成してもOK)

//createDynamo.js
var pg = require('pg');

var conString = "tcp://<ユーザー名>:<パスワード>@<endpoint>:<ポート番号>/<DB名>";
var client = new pg.Client(conString);
client.connect(function(err) {
    if(err) console.error(err);
});
var query = client.query("CREATE TABLE data_from_dynamo(id integer,name varchar(50), timestamp timestamp not null default current_timestamp)");

query.on('error', function(error) {
    console.error(error);
});
query.on('end', function(row, error) {
    client.end();
});

data_from_dynamoという名前で、idカラム、nameカラム、timestampカラムを持つテーブルを作成します。(S3のときと同じ)

次にAWSコンソールを使用し、コピー元のdata_to_redshiftというテーブルをDynamoで作成しましょう。
Primary Keyはidという名前で、TypeはHash,Number型で作成します。
テーブルを作成したら、適当なデータを登録します。属性はname(String型)とtimestamp(String型)にします。
dynamo-redshift

Dynamoにデータを登録できたら、このデータをRedshiftに移行するためのプログラムを記述します。
S3から移行したときと同じく、copyコマンドを使用します。

・
・
var query = client.query("copy data_from_dynamo from 'dynamodb://data_to_redshift' credentials \'aws_access_key_id=<アクセスキー>;aws_secret_access_key=<シークレットキー>\' timeformat 'YYYY-MM-DD HH:MI:SS' readratio 1");

query.on('error', function(error) {
    console.log(error);
});
query.on('end', function(row, error) {
    client.end();
});

S3へ移行したときと違う部分は、「readratio」オプションを指定しているところです。
これはDynamoから移行するときだけ使用しなければならないオプションで、プロビジョニングスループットの割合(%)を指定します。
readratioで有効な値は1〜200で、100以上に設定した場合は本来のパフォーマンスに影響がでる可能性があるので、注意とのことです。

上記プログラムを実行して移行が完了したら、Redshiftのデータを見てみましょう。
以前と同じく、Redshiftのテーブルに対してSELECT文を発行してみます。
テーブルのデータが表示されるので、問題なく移行されていることを確認してください。

・
・
var query = client.query("SELECT * FROM data_from_dynamo");

query.on('row', function(row) {
    console.log(row);
});

query.on('error', function(error) {
    console.log(error);
});
query.on('end', function(row, error) {
    client.end();
});

まとめ

今回はDynamoからRedshiftへのデータ移行を試してみました。
S3でもDynamoでも、コマンド1つで簡単にデータ移行が実現できます。
ただ、Dynamoの場合はプロビジョニングスループットのことをよく考えて移行するようにしましょう。

参考サイトなど