如果你的 AWS Lambda 上的 Athena 查询返回为空,有可能出现以下几种情况:
查询错误:首先要检查你的 Athena 查询语句是否正确,如果语句有误,你会得到一个空的返回结果。
数据库与表名:在做 Athena 查询时,请确保你使用的是正确的数据库和表名,否则查询会失效。
权限不足:Lambda Function 调用 Athena 的查询操作需要给 IAM Role 权限。你需要将 Athena 查询的执行权限授予 Lambda IAM Role。
数据库没有数据: 如果 Athena 查询的表中没有任何数据,查询返回结果就为空。
下面是一种解决办法,让你的 AWS Lambda 上的 Athena 查询正常返回结果:
import boto3
def lambda_handler(event, context):
client = boto3.client('athena')
# AWS Lambda IAM Role 需要有执行 Athena 查询的权限
response = client.start_query_execution(
QueryString='SELECT * FROM cloudtrail_logs LIMIT 10;',
QueryExecutionContext={
'Database': 'sample_db'
},
ResultConfiguration={
'OutputLocation': 's3://bucket-name/folder-name/'
}
)
# 查询成功后,获取 QueryExecutionId
query_execution_id = response['QueryExecutionId']
# 通过 QueryExecutionId 获取查询结果,如果结果为空,返回空值
query_results = client.get_query_results(
QueryExecutionId=query_execution_id,
MaxResults=1000
)
if len(query_results['ResultSet']['Rows']) > 1:
return query_results
else:
return "查询结果为空"
此代码示例中,首先创建一个 Athena 的查询执行客户端。然后使用该客户端执行查询操作,并将查询结果存储在 S3 存储桶中。最后通过查询执行 ID 获取查询结果并返回结果。如果结果为空,将返回 "查询结果为空" 的提示信息。
记住,正确的权限和正确的 Athena 查询语