Sie müssen die spezielle Hiveconf für die Variablensubstitution verwenden. z.B
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
Ebenso können Sie die Befehlszeile weitergeben:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Beachten Sie, dass es auch env- und Systemvariablen gibt , auf die Sie ${env:USER}
beispielsweise verweisen können .
Führen Sie die Befehlszeile aus, um alle verfügbaren Variablen anzuzeigen
% hive -e 'set;'
oder führen Sie an der Eingabeaufforderung "Hive" aus
hive> set;
Update:
Ich habe begonnen, auch Hivevar- Variablen zu verwenden und sie in HQL-Snippets einzufügen, die ich mithilfe des source
Befehls aus der Hive-CLI einschließen kann (oder als -i-Option über die Befehlszeile übergeben kann). Der Vorteil hierbei ist, dass die Variable dann mit oder ohne das Präfix hivevar verwendet werden kann und eine ähnliche globale oder lokale Verwendung zulässt.
Nehmen wir also an, Sie haben eine setup.hql, die eine Tabellennamenvariable setzt:
set hivevar:tablename=mytable;
dann kann ich in den Bienenstock bringen:
hive> source /path/to/setup.hql;
und in Abfrage verwenden:
hive> select * from ${tablename}
oder
hive> select * from ${hivevar:tablename}
Ich könnte auch einen "lokalen" Tabellennamen festlegen, der sich auf die Verwendung von $ {Tabellenname} auswirkt, nicht jedoch auf $ {hivevar: Tabellenname}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs.
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Bedeutet wahrscheinlich nicht zu viel von der CLI, kann aber hql in einer Datei haben, die den Quellcode verwendet , aber einige der Variablen "lokal" festlegen, um sie im Rest des Skripts zu verwenden.