Boto3雅典娜查询而不将数据保存到s3
Boto3 athena query without saving data to s3
我正在尝试使用 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输出位置写是强制性的。那么有什么方法可以避免这种情况并仅在响应中获得结果呢?
StartQueryExecution
操作确实需要 S3 输出位置。 ResultConfiguration
参数是必需的。
另一种查询 Athena 的方法是 using JDBC or ODBC drivers。如果您不想将结果存储在 S3 中,您可能应该使用此方法。
尽管您想使用 python 处理数据,但您仍然需要提供 s3 作为 Athena 的临时位置来保存数据。但是您可以使用分页 API 将数据作为元组进行分页。请参考示例here。希望有帮助
每当 运行 '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 临时存储桶中的所有文件。
我正在尝试使用 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输出位置写是强制性的。那么有什么方法可以避免这种情况并仅在响应中获得结果呢?
StartQueryExecution
操作确实需要 S3 输出位置。 ResultConfiguration
参数是必需的。
另一种查询 Athena 的方法是 using JDBC or ODBC drivers。如果您不想将结果存储在 S3 中,您可能应该使用此方法。
尽管您想使用 python 处理数据,但您仍然需要提供 s3 作为 Athena 的临时位置来保存数据。但是您可以使用分页 API 将数据作为元组进行分页。请参考示例here。希望有帮助
每当 运行 '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 临时存储桶中的所有文件。