#boto3 #amazon-athena
#boto3 #amazon-athena
Вопрос:
Я выполняю запрос Athena с использованием библиотеки boto3 в соответствии с приведенным ниже кодом:
import boto3
client = boto3.client('athena')
def main():
queryStart = client.start_query_execution(
QueryString = 'SELECT * FROM <tablename>',
QueryExecutionContext = {
'Database': '<databasename>'
},
ResultConfiguration={
'OutputLocation': 's3://<outputlocation>',
'EncryptionConfiguration': {
'EncryptionOption': 'SSE_S3'
}
}
)
queryExecution = client.get_query_results(QueryExecutionId=queryStart['QueryExecutionId'],MaxResults=10)
prinnt(queryExecution)
При выполнении этого простого кода я получаю ошибку:
Traceback (most recent call last):
File "readingathena.py", line 38, in <module>
main()
File "readingathena.py", line 33, in main
for i in response_iterator:
File "C:Program FilesPython36libsite-packagesbotocorepaginate.py", line 255, in __iter__
response = self._make_request(current_kwargs)
File "C:Program FilesPython36libsite-packagesbotocorepaginate.py", line 332, in _make_request
return self._method(**current_kwargs)
File "C:Program FilesPython36libsite-packagesbotocoreclient.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "C:Program FilesPython36libsite-packagesbotocoreclient.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidRequestException: An error occurred (InvalidRequestException) when calling the GetQueryResults operation: Query has not yet finished. Current state: RUNNING
Чего я хочу добиться, так это напечатать результат на консоли вместо того, чтобы хранить его в папке s3.
P.S выходные данные сохраняются в корзине S3, несмотря на ошибку. Но не удается получить ответ с помощью функции «get_query_results»
Ответ №1:
Невозможно получить результаты запроса, пока запрос не будет завершен, т. Е. состояние SUCCEEDED
. Вы должны использовать get_query_execution
вызов API для опроса состояния, пока оно не будет SUCCEEDED
и только после этого вызывать get_query_results
.
Также, к сожалению, нет способа получить результат без его сохранения на S3. Так устроена Athena, и обойти это невозможно.
Ответ №2:
У меня была эта проблема, я исправил ее, только добавив политику «AmazonS3FullAccess» к роли, которую использует Lambda.