Il semble que votre situation est:
- fichiers apparaissent au hasard dans S3 à partir d'un serveur SFTP
- Vous voulez charger les données dans Redshift
Il y a deux façons de base que vous pourriez faites ceci:
- Chargez les données directement depuis Amazon S3 dans Amazon Redshift, ou
- Envoyez les données par Amazon Kinesis Firehose
Franchement, il y a peu d'avantages à l'envoyer par Kinesis Firehose parce Kinesis simplement lot vers le haut, le stocker dans des fichiers temporaires S3 puis le charger dans Redshift. Par conséquent, ce ne serait pas une approche bénéfique.
Au lieu de cela, je recommande:
- Configurer un événement sur le seau Amazon S3 pour envoyer un message à un Amazon SQS file d'attente chaque fois qu'un fichier est créé
- Configurer Amazon CloudWatch Events à déclencher une fonction AWS Lambda périodiquement (par exemple toutes les heures, ou 15 minutes, ou tout ce qui répond aux besoins de votre entreprise)
- La fonction AWS Lambda lit les messages de SQS a nd construit un manifest file, puis déclenche Redshift importer les fichiers répertoriés dans le fichier manifeste
Ceci est une solution simple à couplage lâche qui sera beaucoup plus simple que l'approche Firehose (ce qui exigerait une certaine façon la lecture de chaque fichier et envoi du contenu à Firehose).
Bienvenue dans StackOverflow! Que voulez-vous dire par "flux de données à partir de S3 seau"? Comment les données sont-elles envoyées à S3? Est-il possible de changer cette entité d'envoi pour l'envoyer à Firehose au lieu de S3? Qu'est-ce que vous allez faire avec les données une fois qu'il va dans Firehose? –
Les données proviennent d'un serveur SFTP et une fois que les données arrivent dans le S3, je veux les stocker dans Redshift. Afin d'éviter la perte de données, je veux mettre les données dans le flux firehose, puis stocker dans Redshift. – Vignesh