Переименование файла S3 после выгрузки и публикация его в другой учетной записи AWS S3

#amazon-web-services #amazon-s3 #amazon-redshift

#amazon-web-services #amazon-s3 #amazon-redshift

Вопрос:

У меня есть некоторые данные, которые мне нужно выгрузить из redshift (учетная запись AWS A) в другую учетную запись S3 (учетная запись AWS B).

Моя учетная запись AWS (A) имеет разрешения на запись в необходимую корзину S3 в учетной записи B.

Путь к файлу в учетной записи B должен выглядеть примерно так: s3://folder1/folder2/YYYYMMDD.gz где имя файла будет ежедневной лентой.

К сожалению, когда я использую unload, он добавляет 000 в конец имени файла, поэтому он выглядит так YYYYMMDD000.gz . Из-за того, как спроектированы конвейеры учетной записи B, я не могу позволить этому имени файла быть с 000 .

Мое решение — выгрузить в мою учетную запись A: s3://accountA/folder1/folder2/YYYYMMDD000.gz и каким-то образом переместить и переименовать файл и сбросить его в учетную s3://folder1/folder2/YYYYMMDD.gz запись B.

Есть ли лучший способ добиться того же? Существуют ли какие-либо собственные инструменты AWS, которые могут помочь мне перемещать эти файлы между учетными записями и переименовывать (таким образом, как только файл попадает в мою учетную запись, запускается копирование файла)?

Спасибо!

Комментарии:

1. Он все еще добавляется 000 , если вы задаете PARALLEL OFF его в UNLOAD команде?

2. ДА. Я использую параллельное выключение.

Ответ №1:

Вы не можете точно управлять именем файла при UNLOAD вводе из redshift. По умолчанию вы даже не можете контролировать количество создаваемых файлов, поскольку оно зависит от объема данных и размера вашего кластера Redshift (количество фрагментов). Итак, поскольку Redshift — это не швейцарский армейский нож, вы можете использовать AWS api (на python, используя boto3 команду as bash aws с использованием cli) для перемещения и переименования файла.

Я предлагаю вам сначала выгрузить файл в какую-либо промежуточную область, а затем переместить его в нужное место в качестве второго шага:

 UNLOAD 
...
LOCATION s3://AccountB/staging-area/YYYYMMDD
PARALLEL OFF
  

и затем

 pip install awscli

aws s3 mv s3://AccountB/staging-area/YYYYMMDD000.gz s3://AccountB/folder1/folder2/YYYYMMDD.gz