Команда Redshift COPY вызывает ошибку, если префикс S3 не существует - PullRequest
0 голосов
/ 21 сентября 2018

Когда я запускаю эту команду COPY:

COPY to_my_table (field1, field2, etc)
FROM s3://my-service-f55b83j5vvkp/2018/09/03
CREDENTIALS 'aws_iam_role=...'
JSON 'auto' TIMEFORMAT 'auto';

Я получаю эту ошибку:

The specified S3 prefix '2018/09/03' does not exist

Что имеет смысл, потому что в моем контейнере S3 нет файла с этим конкретным префиксом,Тем не менее, это часть ежедневной работы по загрузке данных, где иногда есть, что загружать, но в других случаях загружать нечего.

Я проверил документацию COPY , и это не такПохоже, что можно избежать ошибки и просто ничего не делать, если под этим префиксом нет объектов.Может я что-то упустил?

1 Ответ

0 голосов
/ 21 сентября 2018

Я хотел бы предложить здесь, как мы решили эту проблему в нашем случае, хотя ее простое решение, но может быть полезным для других.Джон Скотт предложил в комментарии хороший вариант, который мне понравился.Но, к сожалению, в нашем случае мы не можем этого сделать, так как система добавления файлов в S3 не была в нашем распоряжении.Так что не уверен, что это ваш случай тоже.Я думаю, что вы могли бы решить вашу проблему несколькими способами, но я предлагаю два варианта:

1) Поскольку вы можете запускать задание cron для загрузки данных в Redshift, поместите файл в существованиепроверьте перед выполнением команды Copy, как показано ниже.

path=s3://my-service-f55b83j5vvkp/2018/09/03
count=\`s3cmd ls $path | wc -l\`

if [[ $count -eq 1 ]]; then
    //Your Redshift copy code goes here.
else
    echo "Nothing to load"
fi

Преимущество этих параметров заключается в экономии некоторых затрат, хотя они могут быть совершенно незначительными.

2) фиктивный файл без записей, который в конечном итоге не будет загружать данные в Redshift.

...