Quelle est la différence entre hivevar et -hiveconf?
De la ruche -h :
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas le sentiment, comme le montrent les exemples de la documentation adéquate, alors voici ma tentative de réponse.
Au début il n'y avait qu'
--hiveconf
et la substitution de la variable n'existe pas.La
--hiveconf
option permet aux utilisateurs de définir La ruche des valeurs de configuration à partir de la ligne de commande et qu'il a été. Tous Ruche valeurs de configuration sont stockés sous lahiveconf
espace de noms, c'est à direhiveconf:mapred.reduce.tasks
. Ces valeurs vous ont permis de contrôler les choses comme le nombre de cartographes et les réducteurs, si des messages d'état doit être affiché, et si le script doit continuer sur les erreurs.Plus tard, la substitution de variable a été ajoutée. Cela signifie que vous pouvez maintenant utiliser les variables dans les requêtes avec le
${...}
de la syntaxe. Cependant, les seules variables vous pouvez définir à partir de la ligne de commande ont été en vertu de lahiveconf
espace de noms à l'aide de--hiveconf
, alors c'est aux utilisateurs de poser leurs variables.Mettre vos variables personnelles en vertu de la Ruche de la configuration de l'espace de noms ne sera probablement pas de casser quelque chose, mais c'est aussi une bonne forme. Plus tard, il a été suggéré qu'un
hivevar
espace de noms sera ajouté spécifiquement pour les variables utilisateur, qui pourrait également être définies sur la ligne de commande à l'aide de--hivevar
. Cela signifiait un nettoyeur de séparation entre la Ruche configuration des valeurs et des variables définies par l'utilisateur.En résumé:
Le
hiveconf
espace de noms et--hiveconf
doit être utilisé pour définir la Ruche des valeurs de configuration.Le
hivevar
espace de noms et--hivevar
devrait être utilisé pour définir les variables de l'utilisateur.Réglage des variables utilisateur en vertu de la
hiveconf
espace de noms ne sera probablement pas de casser quelque chose, mais n'est pas recommandé.@Lama a expliqué cela en détail, de même que les deux types de variables sont accessibles différemment.
La
--hivevar
variables sont accessibles à l'aide${var-name}
, tandis que le--hiveconf
sont accessibles${hiveconf:var-name}
à l'intérieur de la ruche.par exemple, ci-Dessous des exemples accéder à une variable et imprimer la valeur de la ruche.
hivevar:
de sortie:
this is a
hiveconf:
de sortie:
this is a
Pas de différence à l'exception de l'espace de noms.
hiveconf
ethivevar
sont des espaces de noms différents.hivevar
espace de noms a été ajoutée juste pour séparer les propriétés de configuration de l'espace de noms et la Ruche des variables de l'espace de noms. Voir https://issues.apache.org/jira/browse/HIVE-2020 pour plus d'informations.Vous Pouvez consulter ce pour la différance
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
Il y a trois espaces de noms pour les variables – hiveconf, système, et env. (Les variables personnalisées peuvent également être créés dans un autre espace de noms avec le définir ou hivevar option dans la Ruche 0.8.0 et versions ultérieures).
Nous pouvons également les utiliser au début du script:
hiveconf:
hivevar: