私は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";
}
}
}
しかし、JSON形式を戻すにはどうすればいいですか?上で提案したことを行っても、CSV出力が得られます...代わりにJSON応答を指定する方法はありますか? – condo1234
あなたの質問に書くコードを追加して、自分が何をしているかを確認することができます。 getQueryResults()を処理するときには、返されたデータを任意の形式で書き込みます。 –
私はPHPコードを更新しました。必要なのは、結果を取得してそれらを反復することです。それは、私が戻ってくる1列のデータだけです。より便利なJSONを好むだろう – condo1234