Прежде чем завершить свой подход, вы должны рассмотреть следующие важные моменты:
Если возможно, сожмите csv-файлы в gzips и затем включите их в соответствующие таблицы красных смещений.Это уменьшит размер вашего файла с хорошим запасом и увеличит общую производительность приема данных.
Завершите схему сжатия для столбцов таблицы.Если вы хотите, чтобы красное смещение выполняло эту работу, автоматическое сжатие можно включить с помощью «COMPUPDATE ON» в команде копирования.Обратитесь к aws документации
Теперь, чтобы ответить на ваш вопрос:
Поскольку вы создали корзину S3 для нее, создайте каталоги для каждой таблицы ипоместите свои файлы там.Если ваши входные файлы имеют большой размер, разбейте их на несколько файлов (количество файлов должно быть выбрано в соответствии с количеством имеющихся у вас узлов, для обеспечения лучшего параллельного приема см. Документацию aws doc для получения более подробной информации).
Ваша команда копированиядолжен выглядеть примерно так:
PGPASSWORD=<password> psql -h <host> -d <dbname> -p 5439 -U <username> -c "copy <table_name> from 's3://<bucket>/<table_dir_path>/' credentials 'aws_iam_role=<iam role identifier to ingest s3 files into redshift>' delimiter ',' region '<region>' GZIP COMPUPDATE ON REMOVEQUOTES IGNOREHEADER 1"
следующий шаг, чтобы создать лямбду и включить sns поверх redshift s3 bucket, этот sns должен запустить lambda, как только вы получите новые файлы в s3 bucket.Альтернативный метод заключается в настройке планировщика cloudwatch для запуска лямбды.
Может быть создана лямбда (java / python или любой другой язык), которая читает файлы s3, подключается к красному смещению и принимает файлы в таблицы с помощью команды copy.
У лямбды есть 15-минутный лимит, если это вас беспокоит, то лучше будет фаргейт.Выполнение заданий на EC2 приведет к большему количеству счетов, чем к лямбде или фаргейту (на случай, если вы забудете выключить машину ec2)