2017-04-11 2 views
1

Ich bin auf der Suche nach einem Befehlszeilen-Tool, um Abfragen an Amazon Athena.Kommandozeilen-Tool zum Zugriff auf Amazon Athena

Es funktioniert mit JDBC, mit dem Treiber com.amazonaws.athena.jdbc.AthenaDriver, aber ich habe kein Befehlszeilenprogramm gefunden, das damit arbeitet.

+0

aus der [Dokumentation] (https://aws.amazon.com/athena/faqs/): _Amazon Athena kann über die AWS Management-Konsole und ein JDBC-Treiber zugegriffen werden. Sie können Abfragen programmgesteuert ausführen, Tabellen oder Partitionen mithilfe des JDBC-Treibers hinzufügen. Es sieht so aus, als ob die Verwaltungskonsole oder der Code, der JDBC verwendet, die einzigen aufgelisteten Optionen sind. –

+0

@TimBiegeleisen Danke für die Antwort. Ja, ich habe das auch in der Dokumentation gelesen, aber ich habe mich gefragt, ob es eine "inoffizielle" Möglichkeit gibt, von der Kommandozeile aus zu fragen. – greuze

+0

Nun könnte man immer ein schlankes Wrapper-Konsolenprogramm in Java schreiben. –

Antwort

0

Ab Version 1.11.89 unterstützt die AWS command line tool Amazon Athena-Operationen.

Zuerst müssen Sie die AmazonAthenaFullAccess-Richtlinie an die IAM-Rolle des aufrufenden Benutzers anfügen.

Dann, um die Abfrage zu beginnen, werden Sie den start-query-execution Befehl wie folgt:

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

Dies wird ein JSON-Objekt des QueryExecutionId zurückkehren, die verwendet werden können, um die Abfrageergebnisse mit dem folgenden Befehl abrufen :

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

Gibt auch ein JSON-Objekt der Ergebnisse und Metadaten zurück. Weitere Informationen finden Sie im offiziellen AWS Documentation.

Hoffe, das hilft!

0

Erweitern auf vorherige Antwort von @MasonWinsauer. Benötigt bash und 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" 
Verwandte Themen