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

时间:2019-11-16 14:37:37

标签: python amazon-web-services boto3 amazon-athena

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

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

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

1 个答案:

答案 0 :(得分:0)

如果要获取查询执行的结果,则需要通过boto3 API(使用queryStart['QueryExecutionId']作为输入)使用雅典娜客户端的get_query_results方法。从AWS文档中可以看到,您需要解析响应字典。

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

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

输出“成功”,“失败”或“取消”之一。