Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Lambda Python请求athena错误输出位置_Python 2.7_Amazon S3_Aws Lambda_Boto3_Amazon Athena - Fatal编程技术网

Python 2.7 Lambda Python请求athena错误输出位置

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

我正在使用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/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 until
infinitiy