こんにちは!中の人です。
前回のレシピでは、『Amazon Redshift編~プログラムからRedshiftを操作してみよう!(ODBC接続)~』ということで、Amazon Redshiftにプログラムを通してPHPからODBC接続する方法を紹介しました。
今回は、「Amazon Redshift編~プログラムからRedshiftを操作してみよう!(PG接続)~」と題して、PHPを利用してRedshiftにPG接続して操作する方法を紹介します。
おそらく、PHPからODBC接続を利用したことがある人はそれほど多くないと思います。また件数が多い場合、ODBCの場合、メモリを非常に食うためスペックが高くないと処理できないことがあるため、PG接続がオススメです。
(JDBC接続はJAVA環境をインストールする必要があり、PHPの場合PG接続がオススメです。)
事前準備
1. 「Amazon Redshift編~Redshiftをはじめてみよう!パート①、パート②」を参考にRedshiftを起動させておきます。
2. サーバに対してphp-pgsqlをインストールしておきます。
1 |
yum -y install php-pgsql |
テーブルの作成
ここからはRedshiftに対する操作です。
3. 一覧から該当するClusterを選択します。
4. Clusterの情報からJDBC URLをコピーします。
5. 続いてPHPのプログラムを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $conn = "host=***.***.ap-northeast-1.redshift.amazonaws.com port=5439 dbname=[データベース名] user=[ユーザー名] password=[パスワード]"; $link = pg_connect($conn); if (!$link) { die('ERROR!'.pg_last_error()); } print(“OK!\n”); $sql = "SELECT NOW();"; $result = pg_query($link,$sql); $rows = pg_fetch_row($result); var_dump($rows); ?> |
2行目 管理画面のODBC URLを一部変更の必要があります。
1 2 3 |
jdbc:postgresql://***.***.ap-northeast-1.redshift.amazonaws.com:5439/[データベース名] ↓ $conn = "host=***.***.ap-northeast-1.redshift.amazonaws.com port=5439 dbname=[データベース名] user=[ユーザー名] password=[パスワード]"; |
6. 上記をサーバにアップロードして実行します。
成功するとソースが以下の様に表示されている事が確認できます。
1 2 3 4 5 |
OK! array(1) { [0]=> string(29) "2013-06-14 04:42:09.966843+00" } |
なお、エラーについては以下の2つの方法を利用して取得することができます。
1 |
$error = pg_last_error($link); |
⇒クエリそのものに間違えがある場合や処理した結果エラーが起きた場合、上記で取得出来ます。
1 |
Check 'stl_load_errors' system table for details. |
上記の様に表示される場合は以下の方法で取得することができます。
1 2 3 4 5 |
$sql = "select * from loadview order by starttime desc "; $result = pg_query($link, $sql); while($row = pg_fetch_assoc($result)){ var_dump($row); } |
⇒redshift側のエラーを取得することができます。
いかがでしたでしょうか?
このようにプログラムを通してPG接続でもRedshiftにアクセスすることが確認できたと思います。
また、エラーを取得することで、結果に応じた処理を実装することも容易となります。
次回は『Amazon Redshift~接続方法(ODBC/JDBC/PG接続)別パフォーマンス比較編~』と題して、接続方法別のパフォーマンス比較をおこなってみたいと思いますので、お楽しみに!