Python 2.7 Lambda Python请求athena错误输出位置
我正在使用AWS Lambda,我想在athena中进行一个简单的查询,并将数据存储在s3中 我的代码:Python 2.7 Lambda Python请求athena错误输出位置,python-2.7,amazon-s3,aws-lambda,boto3,amazon-athena,Python 2.7,Amazon S3,Aws Lambda,Boto3,Amazon Athena,我正在使用AWS Lambda,我想在athena中进行一个简单的查询,并将数据存储在s3中 我的代码: import boto3 def lambda_handler(event, context): query_1 = "SELECT * FROM test_athena_laurent.stage limit 5;" database = "test_athena_laurent" s3_output = "s3://athena-laurent-result/l
import boto3
def lambda_handler(event, context):
query_1 = "SELECT * FROM test_athena_laurent.stage limit 5;"
database = "test_athena_laurent"
s3_output = "s3://athena-laurent-result/lambda/"
client = boto3.client('athena')
response = client.start_query_execution(
QueryString=query_1,
ClientRequestToken='string',
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': 's3://athena-laurent-result/lambda/'
}
)
return response
它适用于spyder 2.7,但在AWS中我有以下错误:
Parameter validation failed:
Invalid length for parameter ClientRequestToken, value: 6, valid range: 32-inf: ParamValidationError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 18, in lambda_handler
'OutputLocation': 's3://athena-laurent-result/lambda/'
我认为它不理解我的道路,我也不知道为什么
谢谢
ClientRequestToken(字符串)--
一个唯一的区分大小写的字符串,用于确保创建查询的请求是幂等的(只执行一次)。如果收到另一个StartQueryExecution请求,将返回相同的响应,并且不会创建另一个查询。如果参数已更改,例如QueryString,则返回错误。[]
如果未提供,此字段将自动填充。
如果要为
ClientRequestToken
提供字符串值,请确保它是。Per@Tomalak的点ClientRequestToken
是一个字符串。但是,根据我刚刚链接的文档,在使用SDK时,您无论如何都不需要它
此令牌被列为非必需,因为AWS SDK(例如AWS SDK for Java)会自动为用户生成令牌。如果未使用AWS SDK或AWS CLI,则必须提供此令牌,否则操作将失败
因此,我将重构如下:
import boto3
def lambda_handler(event, context):
query_1 = "SELECT * FROM some_database.some_table limit 5;"
database = "some_database"
s3_output = "s3://some_bucket/some_tag/"
client = boto3.client('athena')
response = client.start_query_execution(QueryString = query_1,
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': s3_output
}
)
return response
就错误消息而言,“参数验证失败-参数ClientRequestToken的长度无效”非常明确。可能
'string'
不是此参数的正确值。谢谢,这是我的错误。你知道我在哪里可以找到ClientRequestToken吗?我像在spyder中一样删除ClientRequestToken。在spyder中,它可以工作,但在AWS中则不行。可能是我没有权利ClientError:调用StartQueryExecution时发生错误(AccessDeniedException)
感谢您提供文档链接,非常有用。我在看两份文件,但它不在那里。我得到的错误消息是参数ClientRequestToken的长度无效,值:28,有效范围:32 inf
,这意味着32 untilinfinitiy