Boto3 如何在不将数据保存到S3的情况下查询Athena?

15
我正在尝试使用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输出位置才能进行写入。那么有什么方法可以避免这种情况并仅通过响应获取结果呢?

3个回答

4

目的是使用Python boto3运行这些查询。我知道可以使用SQL Workbench运行它们并在那里配置JDBC驱动程序,但不确定是否可以使用Python运行。 - muazfaiz

2

每当运行“start_query_execution”命令时,您都需要指定S3临时存储桶位置。但是,您可以通过使用查询ID运行“get_query_results”方法来获得结果集(字典)。

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

{
'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客户端文档:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html#Athena.Client.get_query_results

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


2
即使您想使用Python处理数据,但仍需要将S3作为Athena的临时位置来保存数据。但是,您可以使用Pagination API以元组形式浏览数据。请参考此示例。希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接