#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