2017-11-30 30 views
0

私はstartQueryExecution()でAthena APIを使用してS3の応答のCSVファイルを作成できます。しかし、JSONレスポンスを自分のアプリケーションに戻したいので、データをさらに処理することができます。私はAPIを介してstartQueryExecution()を実行した後にJSON結果を返そうとしていますが、JSONレスポンスの結果をどのように取得できますか?API経由でAthenaクエリからJSONを返します

私はAWS PHP SDK [https://aws.amazon.com/sdk-for-php/]を使用していますが、実際に応答を返すことができないため、これは任意の言語に関連しています。単にCSVファイルをS3に保存するだけです。

$athena = AWS::createClient('athena'); 
$queryx = 'SELECT * FROM elb_logs LIMIT 20'; 

$result = $athena->startQueryExecution([ 
    'QueryExecutionContext' => [ 
     'Database' => 'sampledb', 
    ], 
    'QueryString' => 'SELECT request_ip FROM elb_logs LIMIT 20', // REQUIRED 
    'ResultConfiguration' => [ // REQUIRED 
     'EncryptionConfiguration' => [ 
      'EncryptionOption' => 'SSE_S3' // REQUIRED 
     ], 
     'OutputLocation' => 's3://xxxxxx/', // REQUIRED 
    ], 
]); 

// check completion : getQueryExecution() 
$exId = $result['QueryExecutionId']; 

sleep(6); 

$checkExecution = $athena->getQueryExecution([ 
    'QueryExecutionId' => $exId, // REQUIRED 
]); 


if($checkExecution["QueryExecution"]["Status"]["State"] == 'SUCCEEDED') 
{ 
    $dataOutput = $athena->getQueryResults([ 
     'QueryExecutionId' => $result['QueryExecutionId'], // REQUIRED 
    ]); 

     while (($data = fgetcsv($dataOutput, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
     }   

} 

答えて

2

Amazon Athena SDKはクエリの結果を返し、JSONとして書き込むことができます。 SDKはあなた自身のためにこれをしません。

API startQueryExecution()はQueryExecutionIdを返します。これを使用して、getQueryExecution()を呼び出して、照会が完了したかどうかを判別します。クエリが完了すると、getQueryResults()を呼び出します。

結果セットの各行を処理できます。

+0

しかし、JSON形式を戻すにはどうすればいいですか?上で提案したことを行っても、CSV出力が得られます...代わりにJSON応答を指定する方法はありますか? – condo1234

+0

あなたの質問に書くコードを追加して、自分が何をしているかを確認することができます。 getQueryResults()を処理するときには、返されたデータを任意の形式で書き込みます。 –

+0

私はPHPコードを更新しました。必要なのは、結果を取得してそれらを反復することです。それは、私が戻ってくる1列のデータだけです。より便利なJSONを好むだろう – condo1234

関連する問題