查询雅典娜时无法在 lambda 中返回结果

Unable to get result back in lambda when querying athena

您好,我正在使用 lambda python 来查询 athena。我可以在雅典娜控制台中查询。下面是我的代码。

import json
import boto3
client = boto3.client('athena')

def lambda_handler(event, context):
    query_1 = "SELECT * FROM testtbl"
    database = "testathena"
    s3_output = "s3://somepath/somefolder/"

    client = boto3.client('athena')

    queryStart = client.start_query_execution(QueryString = query_1,
                                        QueryExecutionContext={
                                            'Database': database
                                        },
                                        ResultConfiguration={
                                            'OutputLocation': s3_output
                                        }
                                        )

    query_execution_id = queryStart['QueryExecutionId']
    print(query_execution_id)

以上代码显示

Response:
null

Request ID:
"271d19af-1ac9-446f-b631-f8a0c551bf5c"

Function Logs:
START RequestId: 271d19af-1ac9-446f-b631-f8a0c551bf5c Version: $LATEST
c36222f1-f31b-4f32-8384-fdeddadd68ba
END RequestId: 271d19af-1ac9-446f-b631-f8a0c551bf5c
REPORT RequestId: 271d19af-1ac9-446f-b631-f8a0c551bf5c  Duration: 559.86 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 77 MB  Init Duration: 335.55 ms    

当我使用 athena 控制台查询时,它会显示所有结果。

      emp_id
1     101
2     102

有人可以帮我找出问题所在吗?任何帮助,将不胜感激。谢谢

如果你想得到查询执行的结果,你需要通过 boto3 API 使用雅典娜客户端的 get_query_results 方法,它以 queryStart['QueryExecutionId'] 作为输入.正如您从 AWS 文档中看到的那样,您需要解析响应字典。

请注意,在执行此操作之前,您需要确保查询执行已完成,状态为 SUCCESS。基本上,您需要在 while 循环中使用 get_query_execution 直到

response['QueryExecution']['Status']['State']

输出'SUCCEEDED''FAILED'或'CANCELLED'之一。