この記事は公開されてから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に移行するためのプログラムを記述します。 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の場合はプロビジョニングスループットのことをよく考えて移行するようにしましょう。
参考サイトなど
- Amazon Redshift: http://aws.amazon.com/jp/redshift/
- Loading data from an Amazon DynamoDB table: http://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html