Da -h alveare:Qual è la differenza tra -hivevar e -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Da -h alveare:Qual è la differenza tra -hivevar e -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Non mi sentivo abbastanza come gli esempi dalla documentazione erano adeguati, quindi ecco il mio tentativo di una domanda.
All'inizio c'era solo il --hiveconf
e la sostituzione variabile non esisteva.
L'opzione --hiveconf
consentiva agli utenti di impostare Hive configuration values dalla riga di comando e così era. Tutti i valori di configurazione Hive sono memorizzati nello spazio dei nomi hiveconf
, ad esempio hiveconf:mapred.reduce.tasks
. Questi valori permettevano di controllare cose come il numero di mappatori e riduttori, se i messaggi di stato dovevano essere visualizzati e se lo script dovesse continuare con errori.
Successivamente, variable substitution was added. Ciò significa che ora è possibile utilizzare le variabili nelle query con la sintassi ${...}
. Tuttavia, le uniche variabili che si potevano impostare dalla riga di comando erano sotto lo spazio dei nomi hiveconf
usando --hiveconf
, quindi è lì che gli utenti inseriscono le loro variabili.
Mettere le tue variabili personali sotto lo spazio dei nomi di configurazione Hive probabilmente non spezzerà nulla, ma non è neanche una buona forma. Successivamente, it was suggested, aggiungere uno spazio dei nomi hivevar
specifico per le variabili utente che potrebbero anche essere definite sulla riga di comando utilizzando --hivevar
. Ciò significava una separazione più pulita tra i valori di configurazione Hive e le variabili definite dall'utente.
In sintesi:
Il hiveconf
spazio dei nomi e --hiveconf
dovrebbero essere utilizzati per impostare i valori di configurazione Hive.
Lo spazio dei nomi hivevar
e --hivevar
devono essere utilizzati per definire le variabili utente.
L'impostazione delle variabili utente sotto lo spazio dei nomi hiveconf
probabilmente non interromperà nulla, ma non è consigliata.
Nessuna differenza, tranne lo spazio dei nomi. hiveconf
e hivevar
sono spazi dei nomi diversi. Lo spazio nomi hivevar
è stato aggiunto solo per separare lo spazio dei nomi delle proprietà di configurazione e dello spazio Hive. Vedere https://issues.apache.org/jira/browse/HIVE-2020 per ulteriori informazioni.
è possibile fare riferimento per questo la différance
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
Ci sono tre spazi dei nomi per le variabili - hiveconf, sistema e ENV. (Custom variables può anche essere creato in un namespace separato con l'opzione define o hivevar in Hive 0.8.0 e versioni successive.)
@Llama ha spiegato in dettaglio, insieme a che entrambi i tipi di variabili sono accessibili in modo diverso.
Si accede alle variabili --hivevar
utilizzando ${var-name}
, mentre l'--hiveconf
si accede a ${hiveconf:var-name}
all'interno dell'alveare.
ad es. Sotto gli esempi si accede alla variabile e si stampa il suo valore nell'alveare.
hivevar:
hive --hivevar a='this is a' -e '!echo ${a};'
uscita: this is a
hiveconf:
hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};'
uscita: this is a
Io in realtà FI lo ha risolto molto tempo fa, ma bella risposta, grazie! – Karnimrod
Ho pensato che probabilmente lo avevi, ma ho deciso di presentare un'altra risposta per i futuri lettori, per ogni evenienza. =] –