У меня есть конвейер, который перемещает примерно 1 ТБ данных, все файлы CSV. В этом пайплайне сотни файлов с разными именами. У них есть компонент даты, который автоматически разделяется. Мой вопрос заключается в том, как использовать CDK для автоматического создания подпапок на основе имени файла. Другими словами, данные относятся к широкой категории, но нашим специалистам по обработке и анализу данных они нужны еще на одном уровне детализации.
Группировка файлов S3 в подпапки
1 июля 2021 в 18:31
225
1
Ответы (1)
3 июля 2021 в 00:46
Похоже, вам нужно перемещать входящие объекты в папки на основе информации в их имени файла (ключ).
Это можно сделать, добавив триггер в корзину Amazon S3, который запускает функцию AWS Lambda при создании нового объекта.
Вот код из Перемещение файла на основе имени файла с помощью Amazon S3:
import boto3
import urllib
def lambda_handler(event, context):
# Get the bucket and object key from the Event
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
# Only copy objects that were uploaded to the bucket root (to avoid an infinite loop)
if '/' not in key:
# Determine destination directory based on Key
directory = key # Your logic goes here to extract the directory name
# Copy object
s3_client = boto3.client('s3')
s3_client.copy_object(
Bucket = bucket,
Key = f"{directory}/{key}",
CopySource= {'Bucket': bucket, 'Key': key}
)
# Delete source object
s3_client.delete_object(
Bucket = bucket,
Key = key
)
Вам потребуется изменить код, который определяет имя целевого каталога на основе key
нового объекта.<99492055595546>
Также предполагается, что новые объекты будут поступать в верхний уровень (корневой) корзины, а затем перемещаться в подкаталоги. Если вместо этого новые объекты поступают по заданному пути (например, incoming/
), то только установите триггер S3 для работы на этом пути и удалите логику if '/' not in key
.
Это не похоже на то, что AWS CDK может сделать. Это должно выполняться «конвейером» или как процесс после конвейера (например, S3 запускает функцию AWS Lambda, которая «перемещает» объекты).
Хорошо, какие-нибудь предложения о том, как написать скрипт на Python?