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という結果が返ってきた。速いのか遅いのか、計測して他と比較していないので何とも云えないが、私の目的には使えそうな速さのような気がする。サンプルファイルばかり使ってきたが、いつまでもそれでは仕方がないので、次は自分のスクリプトの中で利用してみよう。