Boto3 athena查询没有将数据保存到s3

问题描述 投票:1回答:3

我试图使用boto3运行一组查询,不想将数据保存到s3。相反,我只想获得结果并希望使用这些结果。我正在尝试执行以下操作

import boto3

client = boto3.client('athena')
response = client.start_query_execution(
        QueryString='''SELECT * FROM mytable limit 10''',
        QueryExecutionContext={
            'Database': 'my_db'
            }.        
        ResultConfiguration={
            'OutputLocation': 's3://outputpath',
            }
        )

print(response)

但在这里我不想给ResultConfiguration,因为我不想在任何地方写出结果。但是,如果我删除ResultConfiguration参数,我会收到以下错误

botocore.exceptions.ParamValidationError: Parameter validation failed:
Missing required parameter in input: "ResultConfiguration"

所以似乎给写s3输出位置是强制性的。那么有什么方法可以避免这种情况并仅在响应中获得结果呢?

amazon-web-services boto3 amazon-athena
3个回答
1
投票

StartQueryExecution动作确实需要S3输出位置。 ResultConfiguration参数是强制性的。

查询Athena的另一种方法是using JDBC or ODBC drivers。如果您不想在S3中存储结果,则应该使用此方法。


1
投票

每当运行'start_query_execution'命令时,您都必须指定S3临时存储桶位置。但是,您可以通过使用查询ID运行'get_query_results'方法来获取结果集(dict)。

响应(字典)将如下所示:

{
'UpdateCount': 123,
'ResultSet': {
    'Rows': [
        {
            'Data': [
                {
                    'VarCharValue': 'string'
                },
            ]
        },
    ],
    'ResultSetMetadata': {
        'ColumnInfo': [
            {
                'CatalogName': 'string',
                'SchemaName': 'string',
                'TableName': 'string',
                'Name': 'string',
                'Label': 'string',
                'Type': 'string',
                'Precision': 123,
                'Scale': 123,
                'Nullable': 'NOT_NULL'|'NULLABLE'|'UNKNOWN',
                'CaseSensitive': True|False
            },
        ]
    }
},
'NextToken': 'string'
}

有关更多信息,请参阅boto3客户端doc:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html#Athena.Client.get_query_results

然后,您可以删除已指定的S3临时存储桶中的所有文件。


0
投票

您仍然需要提供s3作为Athena的临时位置来保存数据,尽管您希望使用python处理数据。但您可以使用Pagination API将数据翻译为元组。请参考示例here。希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.