Инструмент командной строки для доступа к Amazon Athena

Я ищу инструмент командной строки для выполнения запросов к Amazon Athena.

Он работает с JDBC, используя драйвер com.amazonaws.athena.jdbc.AthenaDriver, но я не нашел ни одного инструмента командной строки, который бы с ним работал.


person greuze    schedule 11.04.2017    source источник
comment
Из документации: Доступ к Amazon Athena можно получить через консоль управления AWS и JDBC-драйвер. Вы можете программно запускать запросы, добавлять таблицы или разделы с помощью драйвера JDBC. Похоже, консоль управления или код с использованием JDBC — единственные перечисленные варианты.   -  person Tim Biegeleisen    schedule 11.04.2017
comment
@TimBiegeleisen Спасибо за ответ. Да, я тоже читал это в документации, но мне было интересно, есть ли какой-нибудь неофициальный способ запроса из командной строки.   -  person greuze    schedule 11.04.2017
comment
Ну, вы всегда можете написать тонкую консольную программу-оболочку на Java.   -  person Tim Biegeleisen    schedule 11.04.2017


Ответы (4)


Расширение предыдущего ответа от @MasonWinsauer. Требуется bash и jq.

    #!/bin/bash

    # Athena queries are fundamentally Asynchronous.  So we have to :
    # 1) Make the query, and tell Athena where in s3 to put the results (tell it the same place as the UI uses).
    # 2) Wait for the query to finish
    # 3) Pull down the results and un-wacky-Jsonify them.


    # run the query, use jq to capture the QueryExecutionId, and then capture that into bash variable
    queryExecutionId=$(
        aws athena start-query-execution \
        --query-string "SELECT Count(*) AS numBooks FROM books" \
        --query-execution-context "Database=demo_books" \
        --result-configuration "OutputLocation"="s3://whatever_is_in_the_athena_UI_settings" \
        --region us-east-1 | jq -r ".QueryExecutionId"
    )

    echo "queryExecutionId was ${queryExecutionId}"


    # Wait for the query to finish running.
    # This will wait for up to 60 seconds (30 * 2)
    for i in $(seq 1 30); do

        queryState=$(
            aws athena get-query-execution --query-execution-id "${queryExecutionId}"  --region us-east-1 | jq -r ".QueryExecution.Status.State"
        );

        if [[ "${queryState}" == "SUCCEEDED" ]]; then
            break;
        fi;

        echo "  Awaiting queryExecutionId ${queryExecutionId} - state was ${queryState}"

        if [[ "${queryState}" == "FAILED" ]]; then
            # exit with "bad" error code
            exit 1;
        fi;

        sleep 2
    done


    # Get the results.
    aws athena get-query-results \
        --query-execution-id "${queryExecutionId}" \
        --region us-east-1 > numberOfBooks_wacky.json

    # Todo un-wacky the json with jq or something
    # cat numberOfBooks_wacky.json | jq -r ".ResultSet.Rows[] | .Data[0].VarCharValue"
person Milo S    schedule 08.03.2018

Начиная с версии 1.11.89 инструмент командной строки AWS поддерживает операции Amazon Athena.

Во-первых, вам нужно будет привязать политику AmazonAthenaFullAccess к роли IAM вызывающего пользователя.

Затем, чтобы начать выполнение запросов, вы будете использовать команду start-query-execution следующим образом:

aws athena start-query-execution 
    --query-string "SELECT * FROM MyDb.MyTable" 
    --result-configuration "OutputLocation"="s3://MyBucket/logs" [Optional: EncryptionConfiguration]
    --region <region>

Это вернет объект JSON QueryExecutionId, который можно использовать для получения результатов запроса с помощью следующей команды:

aws athena get-query-results
    --query-execution-id <id>
    --region <region>

Который также возвращает объект JSON результатов и метаданных.

Дополнительную информацию можно найти в официальной документации AWS.

Надеюсь это поможет!

person MasonWinsauer    schedule 29.06.2017
comment
Вдобавок к этому сохраняйте команду sleep после запроса aws athena start-query-execution, поскольку он выполняет запрос на серверной части, что требует времени. Итак, в сценарии оболочки установите значение сна соответственно. - person karan arora; 21.09.2020

Вы можете попробовать AthenaCLI, клиент командной строки для службы Athena, который может выполнять автозаполнение и подсветку синтаксиса и является гордым членом сообщества dbcli.

https://github.com/dbcli/athenacli

person Zhaolong Zhu    schedule 20.09.2018

athena-cli должно быть хорошим началом.

person sandeepkunkunuru    schedule 26.03.2018