2009-02-03 22:06:50
今日は、昨日作ったドメインにデータを入れることにする。サンプルフォルダに入っているPutAttributesSample.phpを使う。それを使えとGetting Start Guideに書いてあるからだ。そして、入力されたデータの一覧を見るのは、QuerySample.phpだ。
しかし、そのまま使うと、
Fatal error: Class 'Amazon_SimpleDB_Model_PutAttributes' not found in /home/ynakano/AmazonEC2/sdb/src/
とか、
Fatal error: Class 'Amazon_SimpleDB_Model_Query' not found in /home/ynakano/AmazonEC2/sdb/src/
というエラーが出てしまう。そこで、
$request = new Amazon_SimpleDB_Model_PutAttributes();
を
$request = new Amazon_SimpleDB_Model_PutAttributesRequest();
に、
$request = new Amazon_SimpleDB_Model_Query();
を
$request = new Amazon_SimpleDB_Model_QueryRequest();
と修正する。これに気づくのにもずいぶん掛かっているのだ。こう書けば数行だけど。
今回は私が使うまったく日常的ではないデータを例に説明しよう。説明用のデモデータを用意する元気がないのだ。用いるのはバクテリアの16S rRNAの遺伝子を制限酵素で切断したときの断片の分子量のリストである。ID、Name、AluIF、BstUIF、HaeIIIF、HhaIF、MseIF、RsaIF、TaqIF、Tsp509IF、AluIR、BstUIR、 HaeIIIR、HhaIR、MseIR、MspIR、RsaIR、TaqIR、Tsp509IRという項目がある。まずは試しに二つのデータを入力してみる。上記ファイルの@TODO: set requestの行の後ろに、以下のような入力データを入れる。
require_once ('Amazon/SimpleDB/Model/ReplaceableAttribute.php');
$domainName = 'mydb';
/*
*ID=S000529387
*Name=Oscillatoria corallinae; CJ1 SAG8.92_
*/
$itemName = 'S000529387';
$attribute1 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute1->withName('Name')->withValue('Oscillatoria corallinae; CJ1 SAG8.92_');
$attribute2 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute2->withName('AluIF')->withValue('60340.41');
$attribute3 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute3->withName('BstUIF')->withValue('61552.23');
$attribute4 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute4->withName('HaeIIIF')->withValue('91450.03');
$attribute5 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute5->withName('HhaIF')->withValue('106371.95');
$attribute6 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute6->withName('MseIF')->withValue('13245.32');
$attribute7 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute7->withName('RsaIF')->withValue('132514.29');
$attribute8 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute8->withName('TaqIF')->withValue('17563.20');
$attribute9 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute9->withName('Tsp509IF')->withValue('100795.27');
$attribute10 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute10->withName('AluIR')->withValue('11988.57');
$attribute11 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute11->withName('BstUIR')->withValue('49223.55');
$attribute12 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute12->withName('HaeIIIR')->withValue('20065.83');
$attribute13 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute13->withName('HhaIR')->withValue('23783.33');
$attribute14 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute14->withName('MseIR')->withValue('215512.57');
$attribute15 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute15->withName('RsaIR')->withValue('98722.58');
$attribute16 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute16->withName('TaqIR')->withValue('154842.11');
$attribute17 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute17->withName('Tsp509IR')->withValue('39889.18');
$attributeList = array($attribute1, $attribute2, $attribute3, $attribute4,$attribute5, $attribute6, $attribute7, $attribute8, $attribute9, $attribute10, $attribute11, $attribute12,$attribute13, $attribute14, $attribute15, $attribute16, $attribute17);
$request = new Amazon_SimpleDB_Model_PutAttributes();
$request->withDomainName($domainName)->withItemName($itemName)->setAttribute($attributeList);
invokePutAttributes($service, $request);
/*
*ID=S000427874
*Name=Sphingomonas koreensis; JSS-28; KCTC 2883_
*/
$itemName = 'S000427874';
$attribute1 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute1->withName('Name')->withValue('Sphingomonas koreensis; JSS-28; KCTC 2883_');
$attribute2 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute2->withName('AluIF')->withValue('65124.71');
$attribute3 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute3->withName('BstUIF')->withValue('30624.92');
$attribute4 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute4->withName('HaeIIIF')->withValue('22534.56');
$attribute5 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute5->withName('HhaIF')->withValue('25944.81');
$attribute6 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute6->withName('MseIF')->withValue('178706.88');
$attribute7 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute7->withName('RsaIF')->withValue('131747.79');
$attribute8 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute8->withName('TaqIF')->withValue('17541.24');
$attribute9 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute9->withName('Tsp509IF')->withValue('154133.65');
$attribute10 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute10->withName('AluIR')->withValue('80873.66');
$attribute11 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute11->withName('BstUIR')->withValue('85993.13');
$attribute12 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute12->withName('HaeIIIR')->withValue('112210.56');
$attribute13 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute13->withName('HhaIR')->withValue('71372.31');
$attribute14 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute14->withName('MseIR')->withValue('51693.15');
$attribute15 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute15->withName('RsaIR')->withValue('98664.54');
$attribute16 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute16->withName('TaqIR')->withValue('210623.25');
$attribute17 = new Amazon_SimpleDB_Model_ReplaceableAttributesRequest();
$attribute17->withName('Tsp509IR')->withValue('33719.10');
$attributeList = array($attribute1, $attribute2, $attribute3, $attribute4,$attribute5, $attribute6, $attribute7, $attribute8, $attribute9, $attribute10, $attribute11, $attribute12,$attribute13, $attribute14, $attribute15, $attribute16, $attribute17);
$request = new Amazon_SimpleDB_Model_PutAttributes();
$request->withDomainName($domainName)->withItemName($itemName)->setAttribute($attributeList);
invokePutAttributes($service, $request);
そして、このファイルを実行すると、こんな結果が帰ってくる。
$ php PutAttributesSample.php
Service Response
=================================================================
PutAttributesResponse
ResponseMetadata
RequestId
00000000-0000-0000-b00b-000000000000
BoxUsage
0.0000229733
Service Response
=================================================================
PutAttributesResponse
ResponseMetadata
RequestId
00000000-0000-0000-c00c-000000000000
BoxUsage
0.0000229733
ちゃんとデータが保存されたかどうか不安なので、確認する。QuerySample.phpのinvokeQuery($service, $request);の行頭にあるコメントを外す。
その行の前に、
$request = new Amazon_SimpleDB_Model_Query();
$request->setDomainName('MyDomain');
と書く。MyDomainは自分の使うドメイン名である。保存して実行すると、
$ php QuerySample.php
Service Response
=================================================================
QueryResponse
QueryResult
ItemName
S000529387 ItemName
S000427874 ResponseMetadata
RequestId
00000000-0000-0000-m00m-000000000000
BoxUsage
0.0000140160
という結果が返ってきた。最初、失敗したかと思ったけれども、ItemName S000529387 S000427874というのがデータのIDだった。ちゃんと保存されたのだった。今回使うデータは850個あるので、これを850書き入れたPutAttributesSample.phpを作って実行する。そんなファイルを手で書いていたら大変なので、それもPHPスクリプトで作ったのだけど、それはここでは省略する。
それを実行すると延々と上のような表示が出てくる。とはいっても永久にではなくて850個で終わるわけだけど。
一つ一つのデータを見るには、GetAttributesSample.phpの、
invokeGetAttributes($service, $request);
の行のコメントアウトを消して、その前の部分に、
$request = new Amazon_SimpleDB_Model_GetAttributesRequest();
$request->setDomainName('mydb');
$request->setItemName('S000546840');
と書いてみる。説明にはAmazon_SimpleDB_Model_GetAttributes()と書いてあるけれども、やはりここでもAmazon_SimpleDB_Model_GetAttributesRequest()と修正しないとエラーになる。すると、
$ php GetAttributesSample.php
Service Response
=================================================================
GetAttributesResponse
GetAttributesResult
Attribute
Name
TaqIR
Value
13263.37
Attribute
Name
Tsp509IF
Value
156873.06
Attribute
Name
HaeIIIR
Value
118503.70
Attribute
Name
HhaIR
Value
19787.68
Attribute
Name
AluIF
Value
10461.49
Attribute
Name
BstUIF
Value
37521.16
Attribute
Name
RsaIR
Value
46396.47
Attribute
Name
TaqIF
Value
30030.16
Attribute
Name
MseIR
Value
15117.61
Attribute
Name
Name
Value
Prevotella melaninogenica; ATCC 25845; AY323525
Attribute
Name
HaeIIIF
Value
83171.25
Attribute
Name
BstUIR
Value
86170.15
Attribute
Name
AluIR
Value
14524.21
Attribute
Name
MseIF
Value
13222.34
Attribute
Name
RsaIF
Value
150073.50
Attribute
Name
Tsp509IR
Value
39937.18
Attribute
Name
HhaIF
Value
32817.05
ResponseMetadata
RequestId
00000000-0000-0000-m00m-000000000000
BoxUsage
0.0000098982
という結果が返ってくるわけだ。
さて、ここから慣れ親しんだSQLを使って情報を取得したい。まずはサンプルファイルを使って練習する。SelectSample.phpというファイルを開いて、
invokeSelect($service, $request);
のコメントアウトを外し、その直前に、
$request = new Amazon_SimpleDB_Model_SelectRequest();
$request->setSelectExpression("select ID,Name from mydb where HaeIIIF > '83000' and HaeIIIF < '83200' and Name like 'Desulfomicrobium%'");
という2行を入れてみる。ファイルを閉じて実行すると、
$ php SelectSample.php
Service Response
================================================================
SelectResponse
SelectResult
Item
Name
S000008660
Attribute
Name
Name
Value
Desulfomicrobium orale (T); DSM12838_
Item
Name
S000001391
Attribute
Name
Name
Value
Desulfomicrobium orale; NY676_
Item
Name
S000009411
Attribute
Name
Name
Value
Desulfomicrobium orale; NY677_
Item
Name
S000001744
Attribute
Name
Name
Value
Desulfomicrobium orale; NY679_
Item
Name
S000012513
Attribute
Name
Name
Value
Desulfomicrobium orale; NY683_
ResponseMetadata
RequestId
e5cf2e5f-57fd-483b-869c-958e6714ff30
BoxUsage
0.0000597712
という結果が返ってきた。速いのか遅いのか、計測して他と比較していないので何とも云えないが、私の目的には使えそうな速さのような気がする。サンプルファイルばかり使ってきたが、いつまでもそれでは仕方がないので、次は自分のスクリプトの中で利用してみよう。