en passant l'argument du script shell script hive
J'ai un souci qui peuvent être classés en 2 façons:
Mon exigence est de transmettre l'argument du script shell script hive.
OU
dans un script shell, je devrait inclure la valeur de la variable dans la ruche déclaration.
Je vais vous expliquer avec un exemple pour les deux:
1) Passage d'argument à partir du shell script hiveQL->
My test Hive QL:
select count(*) from demodb.demo_table limit ${hiveconf:num}
Mon test shell script:
cnt=1
sh -c 'hive -hiveconf num=$cnt -f countTable.hql'
Donc, fondamentalement, je veux inclure la valeur du " cnt " dans le HQL, ce qui n'est pas le cas dans cette affaire. J'obtiens l'erreur:
FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause
Je suis sûr que l'erreur signifie que la valeur de la variable n'est pas transmise.
2) Passage d'argument directement dans le shell script->
cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'
Dans les deux cas ci-dessus, je ne pouvais pas laisser passer la valeur de l'argument. Des idées??
PS: je sais que la requête semble absurde de la "limite" dans le compte mais j'ai reformulé le problème j'ai en réalité. L'exigence demeure intacte du passage de l'argument.
Des idées, n'importe qui?
Merci d'avance.
En utilisant des guillemets simples supprime l'expansion.
OriginalL'auteur knowone | 2015-06-02
Vous devez vous connecter pour publier un commentaire.
Définir la variable de cette façon:
num="$cnt"
, si vous voulez rendre la réponse plus générique (mesure de passer à des choses qui ne sont pas seulement des chiffres et peut contenir des espaces, glob caractères, etc).Grâce sras, c'est parfait. Je n'ai jamais utilisé de multiples options pour la ruche à partir de la ligne de commande. Tout à fait d'accord avec Charles; les guillemets simples supprime l'information.
pour être plus précis, on peut utiliser
hivevar
nom de l'espace plutôt que dehiveconf
d'espace de nom. Cependant, les deux ne fonctionnent pas pour votre requête.OriginalL'auteur sras
Cela fonctionne, si elles sont mises dans un fichier nommé
hivetest.sh
, alors invoqué avecsh hivetest.sh
:Vous utilisez des guillemets simples au lieu du double.
En utilisant des guillemets doubles pour l'OPTION n ° 1 fonctionne aussi très bien.
OriginalL'auteur Madhu
hadoop@osboxes:~$ export val=2;
hadoop@osboxes:~$ ruche -e "select * from bms.bms1 où max_seq=$val";
ou
OriginalL'auteur y durga prasad
Essayer cette
cnt=1
OriginalL'auteur Aman