Athena查询的结果通过S3中的查询ID(长字符串)保存。我想知道是否可以用预先指定的名称保存查询结果? (以后可以轻松查看)
答案 0 :(得分:2)
很遗憾,没有(至少现在还没有)!到目前为止,最好的方法是编写一个脚本来检查每次运行的所有结果,然后重命名(移动+删除)该s3存储桶中的所有文件!
答案 1 :(得分:2)
您可以通过简单的AWS Lambda函数执行此操作。
Change names of AWS Athena results stored in S3 bucket
client = boto3.client('athena')
s3 = boto3.resource("s3")
#run query
queryStart = client.start_query_execution(
QueryString = '
#PUT_YOUR_QUERY_HERE
SELECT *
FROM "db_name"."table_name"
WHERE value > 50
',
QueryExecutionContext = {
'Database': "covid_data" //YOUR_ATHENA_DATABASE_NAME
},
ResultConfiguration = {
#query result output location you mentioned in AWS Athena
"OutputLocation": "s3://bucket-name-X/folder-Y/"
}
)
#executes query and waits 3 seconds
queryId = queryStart['QueryExecutionId']
time.sleep(3)
#copies newly generated csv file with appropriate name
#query result output location you mentioned in AWS Athena
queryLoc = "bucket-name-X/folder-Y/" + queryId + ".csv"
#destination location and file name
s3.Object("bucket-name-A", "report-2018.csv").copy_from(CopySource = queryLoc)
#deletes Athena generated csv and it's metadata file
response = s3.delete_object(
Bucket='bucket-name-A',
Key=queryId+".csv"
)
response = s3.delete_object(
Bucket='bucket-name-A',
Key=queryId+".csv.metadata"
)
print('{file-name} csv generated')
答案 2 :(得分:0)
对于命名查询,结果位置的结构如下:
s3://athena-query-results-<account>-<region>/<query-name>/<year>/<month>/<day>/<UUID>.csv
我不知道客户端指定UUID的任何方法。但是您可以在命名查询的s3文件夹中查找最新文件。
或者,您可以使用s3 API或aws cli将结果复制到您选择的位置。
这能回答您的问题吗?
答案 3 :(得分:-1)
def delete_metadata():
s3 = boto3.resource('s3')
client_s3 = boto3.client('s3')
bucket = s3.Bucket('testing')
for obj in bucket.objects.filter(Prefix='prepared/'):
if obj.key.endswith('.metadata'):
print(obj.key)
client_s3.delete_object(Bucket=bucket.name,Key=obj.key)