Возврат JSON из Athena Query через API

Я могу использовать API Athena с startQueryExecution() для создания CSV-файла ответов в S3. Однако я хотел бы иметь возможность вернуть в свое приложение ответ JSON, чтобы я мог продолжить обработку данных. Я пытаюсь вернуть результаты JSON после запуска startQueryExecution() через API, как я могу получить результаты в виде ответа 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";
        }
      }         

}

person condo1234    schedule 30.11.2017    source источник


Ответы (1)


SDK Amazon Athena вернет результаты запроса, после чего вы сможете записать (отправить) их в формате JSON. Сам SDK не сделает этого за вас.

API startQueryExecution() повторно настраивает QueryExecutionId. Используйте это для вызова getQueryExecution(), чтобы определить, завершен ли запрос. После завершения запроса вызовите getQueryResults().

Затем вы можете обработать каждую строку в результирующем наборе.

person John Hanley    schedule 30.11.2017
comment
Но как мне вернуть формат JSON... даже после того, как я сделаю то, что вы предлагаете выше, я получу вывод CSV... есть ли способ вместо этого указать ответ JSON? - person condo1234; 03.12.2017
comment
Добавьте свой код, который вы пишете, к своему вопросу, чтобы я мог видеть, что вы делаете. Когда вы обрабатываете getQueryResults(), вы записываете возвращаемые данные в любом формате, который вам нужен. - person John Hanley; 03.12.2017
comment
Я обновил код PHP, мне нужно вернуть результаты и перебрать их, это просто данные из 1 столбца, которые я возвращаю. Я бы предпочел JSON, так как он более удобен - person condo1234; 04.12.2017