AWS Redsiftを使ってみる

どんな物なのか気になってたので、実際に使ってみました。

AWSコンソールからRedshiftのメニューを選んで、Launch Clusterをクリックしてウィザードを開始します。

クラスタ名や接続時のユーザー、パスワードを指定

クラスタの設定をします。
今回は安いノード+シングルクラスタを選びました。

AZ、セキュリティーグループを指定

内容を確認して起動します。

ちなみに、Redshiftは無料枠対象外。。。

起動中

起動している間に、Redshiftのクラスタにつなぐ為に、クライアントからのアクセスを許可するようにセキュリティーグループを更新します。
今回は、ローカルのPCから繋ぐので、自分のグローバルIPを設定します。

クラスタの準備ができるとエンドポイントん情報などが確認できます。

ノードの種類やスペックも確認できます

ローカルマシンから繋いで動作確認するので、sql workbenchをインストールします。

Macだとドライバ無かったので、ドライバもダウンロードします。

SQL Workbenchを起動すると、接続情報の登録が表示されるので、先ほどのエンドポイントやユーザ、パスワードを入力して接続します。

URLはこんなかんじで入力

jdbc:postgresql://<エンドポイント>:5439/<データベース名>

jdbc:postgresql://sparkgene-dw.redshift.amazonaws.com:5439/firstdb

テストデータとしてこちらで公開されている福岡県のデータ(C00子育てセット)を使いました。

すべての列を入れるとcreate文がめんどくさかったので、一部のみ利用しました。
実際に実行するSQLはこれ。

create table test_1(
category_id int,
contents_id int,
name varchar,
ku_id int,
zipcode varchar,
address varchar,
lat varchar,
lng varchar,
tel varchar,
fax varchar);

利用可能なSQLこちらに掲載されています。

テーブルが作成できたので、selectしてみるとちゃんと作られているようです。

insertを直接書いてデータを登録することも出来ます。

登録されたのをselectしてみる。

Redshiftでは、insertを直接書く以外に、S3、DynamoDBからのロードをサポートしています。
今回は、S3に先ほどの子育てセットデータをアップロードして、COPYコマンドを使って取り込みます。

入力したCOPYコマンドはこんな感じ

copy test_1 from 's3://sparkgene-dw/test_1/test_data.csv'
credentials 'aws_access_key_id=XXXXXXXX;aws_secret_access_key=XXXXXXXXX'
delimiter ',';

千件ちょっとのデータなので、数秒でコピーが終わります。

ロード時にデータの不備があった場合、AWSマネージメントコンソールから、実行されたデータロードが確認できます。

N行目のデータが失敗したとか、詳細なエラー内容が確認できますので、かなり便利です。

SQL実行時のクラスタのメトリックスも確認できます。

PostogreSQLベースなので、一般的なSQLはそのまま使えます

group by, limit, countなど集計に必要な物はもちろん使えます。

RedshiftはEMRと比べると、操作が色々と簡単になっているように感じました。
処理速度も早いので、アクセスログのデータを探したいとか、簡単な集計は色々と便利そうです。