[AWS]DynamoDBとRedshiftでデータのやり取り
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