6
votes

AWS CLI pour S3 Select

J'ai le code suivant, qui est utilisé pour exécuter une requête SQL sur un fichier de clés, situé dans un compartiment S3. Cela fonctionne parfaitement. Ma question est la suivante: je ne souhaite pas que la sortie soit écrite dans un fichier de sortie. Puis-je voir la sortie à l'écran (ma préférence n ° 1)? Sinon, qu'en est-il de la possibilité d'ajouter au fichier de sortie, plutôt que de l'écraser (ma préférence n ° 2). J'utilise les binaires AWS-CLI pour exécuter cette requête. S'il y a un autre moyen, je suis heureux d'essayer (tant que c'est dans bash)

aws s3api select-object-content \
--bucket "project2" \
--key keyfile1 \
--expression "SELECT * FROM s3object s where Lower(s._1) = 'email@search.com'" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {"FieldDelimiter": ":"}, "CompressionType": "GZIP"}' \
--output-serialization '{"CSV": {"FieldDelimiter": ":"}}' "OutputFile"


3 commentaires

Je vois que vous mettez une prime sur la question. Cela signifie-t-il que la réponse avec /dev/stdout ne fonctionne pas? Pouvez-vous fournir une information pourquoi cela ne fonctionne pas? Des erreurs?


Salut Marcin. merci pour l'enregistrement. Je l'ai essayé sur cygwin mais cela n'a pas fonctionné. Aucune erreur, aucune sortie. Je pourrais également essayer ma machine ubuntu, au cas où vous pensez que cela pourrait être spécifique au système d'exploitation


Aucun problème. Vous pouvez commenter à @jellycsc afin qu'il soit averti. Peut-être qu'il sait comment le faire sur cygwin ? Mais sur ubuntu ou tout autre Linux, je ne vois aucune raison pour laquelle cela ne fonctionnerait pas. Ainsi j'ai demandé en premier lieu.


3 Réponses :


0
votes

L'AWS CLI n'offre pas de telles options.

Cependant, vous pouvez plutôt l'appeler via un kit SDK AWS de votre choix.

Par exemple, dans le SDK Python boto3, il existe une fonction select_object_content() qui renvoie les données sous forme de flux . Vous pouvez ensuite le lire, le manipuler, l'imprimer ou le sauvegarder comme vous le souhaitez.


2 commentaires

Merci John. J'essaye de m'éloigner de Python (longue histoire pourquoi). Y a-t-il une autre solution de contournement ici? Puis-je ajouter à un seul fichier de sortie peut-être?


Vous pouvez également utiliser n'importe lequel des autres langages de programmation: C ++, Go, Java, .Net, Node, PHP, Ruby. Pour info, l'AWS CLI est écrite en Python et appelle simplement la commande ci-dessus.



6
votes

Bien sûr, vous pouvez utiliser l'AWS CLI pour ce faire, car stdout n'est qu'un fichier spécial sous Linux.

aws s3api select-object-content \
--bucket "project2" \
--key keyfile1 \
--expression "SELECT * FROM s3object s where Lower(s._1) = 'email@search.com'" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {"FieldDelimiter": ":"}, "CompressionType": "GZIP"}' \
--output-serialization '{"CSV": {"FieldDelimiter": ":"}}' /dev/stdout

Notez le /dev/stdout à la fin.


1 commentaires

@ jellycsc - pouvez-vous confirmer si cela fonctionnerait sur cygwin?



0
votes

Je pense qu'il ouvre / dev / stdout deux fois provoquant kaos.


0 commentaires