Перемещение файлов из одной корзины S3 в другую, которые обновляются в последние два дня - PullRequest
0 голосов
/ 02 октября 2018

Я в процессе создания конвейера данных, который загружает данные из s3 в Amazon красное смещение, у меня есть корзина s3 с многоуровневой структурой папок, например,

Amazon S3>bucket-name/10849813427/2.0/2018/08/16/10958160321 

, и мои файлы помещаются в последнююкаталог (например, 10958160321).

У меня есть несколько таких папок в моей корзине S3 (имя корзины), теперь из всех этих папок в этой корзине S3 я хочу скопировать файлы с «last_modified_date» за последние два дня в другую корзину S3.Я буду обрабатывать эти файлы, используя свое задание ETL, и загружать данные в Redshift.

Есть ли способ отфильтровать файлы при копировании в другое ведро или другую папку в том же ведре?

Спасибо

1 Ответ

0 голосов
/ 02 октября 2018

Вы не можете изменять любой объект с помощью S3.Если вы хотите изменить существующий объект, вам нужно удалить существующий и перезаписать новый объект.Сюда входит переименование и его метаданные.

S3 Метаданные:

https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

Вы можете указать или зациклить несколько дат для поиска соответствующих дат.

DATE=$(date +%Y-%m-%d)
aws s3 ls s3://bucket/2018/ --recursive | grep $DATE

Что касается масштабируемости, если у вас есть больше объектов, у вас возникнет проблема синхронизации при сборе списка объектов с их измененной датой.

S3 Inventory:

Если для сбора списка объектов допустима 24-часовая задержка, вы можете использовать инвентаризацию S3 для составления списка объектов с датой их создания.

https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html

Инвентарь будет доставлен в ведро s3, и вы можете запустить лямбду, прочитать содержимое и переместить объект в нужное место.

S3 Копия:

Вы можете использовать cli / lambda для копирования между сегментами или внутри одного сегмента.

aws s3 mv s3://bucket1/folder1  s3://bucket1/folder2  --recursive
aws s3 mv s3://bucket1/folder1  s3://bucket1/folder1  --recursive

EDIT1:

Фактический скрипт для простого цикла для копирования из источникадо места назначения

#!/bin/sh                                                                                                                  
aws s3api list-objects --bucket "bucket-name" --prefix "prefix/foldername" --query "Contents[?LastModified>='2018-10-02'].{Key: Key}" --profile production | tr '\n' ' ' | jq -c '.[].Key' | while read i; do                                         
    aws s3 mv s3://sourbucket/$i s3://destinationbucket/                                                            
done

Надеюсь, это поможет.

...