(InvalidRequestException) 调用 GetQueryResults 时......从 Lambda Python 查询 Athena ......无法读取结果

(InvalidRequestException) when calling the GetQueryResults..... Querying Athena From Lambda Python.... Cannot Read Results

我一直在尝试从我的 lambda 函数 (Python3.8) 中查询 Athena,但尽管尝试添加 if else 语句来检查执行状态,但我总是遇到同样的错误,但我总是aws 控制台和本地 cli 上出现同样的错误

这是 lambda 函数:

import json
import boto3
import time

def function(event, context):
    client=boto3.client('athena')

    #setup and perform query
    queryStart=client.start_query_execution(
        QueryString = 'SELECT * FROM my_s3_bucket_developer limit 8;',
        QueryExecutionContext = {
            'Database':'mydb'
        },
        ResultConfiguration = {
            'OutputLocation': 's3://athena-results-queries-developer/'
        }
    ) 
    
    #get query ID
    queryId= queryStart['QueryExecutionId']

    #we gonna sleep the function now because we don't know how 
    #long it will take to execute the query
    time.sleep(25)

    results=client.get_query_results(QueryExecutionId = queryId)
    for row in results['ResultSet']['Rows']:
        print(row)

这是我附加到我的 lambda 函数的 IAM 角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "S3:GetBucketLocation",
                "S3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::athena-results-queries-developer/*",
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "glue:GetTable"
            ],
            "Resource": "*"
        }
    ]
}

这是我在日志中不断收到的错误

An error occurred (InvalidRequestException) when calling the GetQueryResults operation: Query did not finish successfully. Final query state: FAILED

"errorType": "InvalidRequestException"

"stackTrace": [
[
"/var/task/lambda_function.py",
26,
"function",
"results=client.get_query_results(QueryExecutionId = queryId)"
], [ "/var/runtime/botocore/client.py", 316, "_api_call", "return self._make_api_call(operation_name, kwargs)" ], [ "/var/runtime/botocore/client.py", 626, "_make_api_call", "raise error_class(parsed_response, operation_name)" ] ] }

如果有人能帮助我,我将不胜感激 - 我已经尝试解决这个问题好几天了

问题是您没有等待查询正确完成。在调用get_query_results.

前需要先调用get_query_execution检查查询是否成功

这里有一个完整的示例,您可以从中获取灵感:https://www.ilkkapeltola.fi/2018/04/simple-way-to-query-amazon-athena-in.html