J'essaie de charger des données d'un dossier de compartiment S3 vers une table en flocon de neige à l'aide de lambda. J'ai configuré un déclencheur S3 où mes fichiers sont ingérés et j'ai formé une intégration entre lambda et snowflake pour charger les fichiers entrants dans mon s3 dans une table de flocon de neige.
Le problème est qu'il y a 1000 fichiers extraits dans mon dossier S3 et qu'une congestion se forme entre mon flocon de neige et lambda. Je cherche un moyen pour que lorsque 1 000 fichiers sont ingérés dans mon compartiment S3, le lambda traite un fichier à la fois. Après avoir chargé le premier fichier, il traite uniquement le fichier suivant dans l'ordre. Par exemple : soit recevez une confirmation de Snowflake, soit recevez une confirmation sur celui-ci.
Vous pouvez configurer une fonction AWS Lambda pour avoir une Concurrence réservée - AWS Lambda :
En définissant Reserved Concurrency = 1
, une seule instance de fonction Lambda s'exécutera à la fois. En fonction de votre configuration Snowflake, vous pouvez choisir d'augmenter ce nombre à 2 ou 3 pour traiter les fichiers plus rapidement sans surcharger Snowflake.
Vous pouvez également configurer la taille du lot, qui est le nombre maximum d'événements transmis à la fonction. Si S3 envoie plusieurs fichiers à la même instance Lambda, votre code peut parcourir les événements et traiter plusieurs fichiers à chaque appel.
Je crains juste légèrement que si vous créez beaucoup d'objets et que la fonction Lambda est limitée par le nombre de concurrence de 1, l'appel S3 à Lambda pourrait provoquer un délai d'attente après plusieurs tentatives. Si c'est le cas, vous devriez :
De cette façon, les messages seront mis en file d'attente en toute sécurité au lieu (éventuellement) d'expiration en raison de retards de fichiers importants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!