J'essaie d'exécuter les commandes CQL à partir du script Shell .. Je peux me connecter au cqlsh (la version CQL que j'utilise est la 1.1.18) mais je ne peux pas envoyer les requêtes à cql.
Avez-vous des idées ou des suggestions sur la façon de procéder? Dois-je me connecter à Cassandra et exécuter quelques commandes (sélectionner/mettre à jour) avec un script shell?
cqlsh -e "select * from ks.table limit 1;" > ~/output
Je ne suis pas sûr de Cassandra 1.1.18, mais vous devriez pouvoir le faire avec le drapeau -f
de cqlsh
. Disons que vous avez un fichier de commandes CQL appelé "orders.cql". Je peux appeler ces commandes contre mon instance Cassandra locale comme ceci:
$ cqlsh -f commands.cql -u myusername -p mypassword localhost
Si je voulais invoquer cela depuis un script Bash, le code du script ressemblerait à ceci:
#!/bin/bash
cqlsh -f commands.cql -u myusername -p mypassword localhost
Enregistrez-le en tant que fichier exécutable et exécutez-le comme un autre.
Besoin de se connecter à cassandra et d'exécuter quelques commandes (select/update) avec le script Shell
Vous pouvez exécuter vos commandes avec le script shell de la manière suivante:
echo "some QUERY; exit" | cqlsh CASSANDRA_Host -u 'USER' -p 'PASS'
La commande "exit" dans la dernière suggestion est un peu hacky.
Je proposerais d'utiliser xargs
avec cqlsh -e
.
echo "some QUERY;" | xargs cqlsh CASSANDRA_Host -u 'USER' -p 'PASS' -e
J'ai récemment dû utiliser cette approche lorsque je travaillais avec docker, car clqsh -f
n'était pas une option (trop complexe pour configurer l'accès au fichier requis).
echo "some QUERY;" | xargs cqlsh CASSANDRA_Host -u 'USER' -p 'PASS' -e
Mais que se passe-t-il si votre instance Cassandra se trouve sur un serveur différent de celui où le script Shell est exécuté? (Spécifiquement dans StreamSets - Cassandra ne devrait-il pas être installé sur le même serveur de manière à ne pas avoir accès à la bibliothèque cqlsh?)