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

2023-12-24

我一直在尝试从我的 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": "*"
        }
    ]
}

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

调用 GetQueryResults 操作时发生错误 (InvalidRequestException):查询未成功完成。最终查询状态:FAILED

“错误类型”:“InvalidRequestException”

“堆栈跟踪”: [
[
“/var/task/lambda_function.py”,
26,
“功能”,
“结果=client.get_query_results(QueryExecutionId = queryId)”
], [ “/var/runtime/botocore/client.py”, 316、 “_api_call”, “返回self._make_api_call(操作名称,kwargs)” ], [ “/var/runtime/botocore/client.py”, 626、 “_make_api_call”, “引发错误类(解析响应,操作名称)” ] ] }

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


问题是您没有等待查询正确完成。你需要打电话get_query_execution并在调用之前检查查询是否成功get_query_results.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐