У меня есть лямбда, которая будет запрашивать Афину и отбрасывать вывод результатов в желаемое ведро. Выходные данные Афины содержат .csv и .csv.metadata. я не хочу получать файл .metadata вместе с файлом .csv, когда моя лямбда-файл сбрасывает его. вот мой код:
def wait_for_result(athena, query_id):state = athena.get_query_execution(QueryExecutionId=query_id)['QueryExecution']['Status']['State']
while state != 'SUCCEEDED':
print('Query state: {}'.format(state))
time.sleep(5)
state = athena.get_query_execution(QueryExecutionId=query_id)['QueryExecution']['Status']['State']
def lambda_handler(event, context):
short_date = event['record']['short_date']
bucket = 'test-rod-us-east-1-orders'
s3_output = 's3://{0}/arda-orders/f=csv/short_date={1}'.format(bucket, short_date)
query = 'query_here'.format(short_date)
boto_session = assume_role('arn:aws:iam::account-id:role/test-contr-etl-ec2-role')
session = assume_role('arn:aws:iam::account-id:role/test-xacct-rod-consumer', boto_session)
athena = session.client('athena')
s3 = session.client('s3')
s3_bucket = session.resource('s3').Bucket(bucket)
response = athena.start_query_execution(QueryString=query,
QueryExecutionContext={
'Database': 'datapond'
},
ResultConfiguration={
'OutputLocation': s3_output
})
query_id = response['QueryExecutionId']
wait_for_result(athena, query_id)
# print ('short_date: {}'.format(short_date))
for key in s3.list_objects(Bucket=bucket)['Contents']:
if short_date in key['Key']:
s3.put_object_acl(ACL='bucket-owner-full-control', Bucket=bucket, Key=key['Key'])
print('set \'bucket-owner-full-control\' for {}'.format(key['Key']))
if '.csv.metadata' in key['Key']:
s3_bucket.delete_objects(
Delete={
'Objects': [
{'Key': key['Key']},
]
}
)
print('deleted {}'.format(key['Key']))
sqs.delete_message(
QueueUrl=sqs_queue_url,
ReceiptHandle=event['receipt_handler']
)
print ('Complete process for short_date: {}'.format(short_date))
Я просто получаю сообщение «удаленный ключ» в журналах, но я все еще нахожу файл .csv.metadata в корзине s3. пожалуйста помогите