我已查看相关帖子 - How to set variables in HIVE scripts
在内部配置单元中,变量工作正常:
hive> set hivevar:cal_month_end='2012-01-01';
hive> select ${cal_month_end};
但是当我通过命令行运行时:
$ hive -e "set hivevar:cal_month_end='2012-01-01';select '${cal_month_end}';"
它一直给我以下错误:
错误:java.lang.IllegalArgumentException:无法从中创建路径 一个空字符串 在org.apache.hadoop.fs.Path.checkPathArg(Path.java:131) 在org.apache.hadoop.fs.Path。(Path.java:139) at org.apache.hadoop.hive.ql.io.HiveInputFormat $ HiveInputSplit.getPath(HiveInputFormat.java:110) 在org.apache.hadoop.mapred.MapTask.updateJobWithSplit(MapTask.java:463) 在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:411) 在org.apache.hadoop.mapred.MapTask.run(MapTask.java:347) 在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:167) at java.security.AccessController.doPrivileged(Native Method) 在javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1469) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
答案 0 :(得分:0)
你必须逃避几个角色。这对我有用。
hive -e "set hivevar:cal_month_end=\'2012-01-01\';select '\${cal_month_end}';"
答案 1 :(得分:0)
你必须得到"
和'
权利
用这个:
hive -e 'set hivevar:cal_month_end="2012-01-01";select ${cal_month_end};'
答案 2 :(得分:0)
我终于知道出了什么问题。问题是在命令行中我不能只选择一些东西,它需要来自某些表。以下工作正常。
$ hive -e "set hivevar:cal_month_end='2012-01-01';select * from foo where start_time > '${cal_month_end}' limit 10"
答案 3 :(得分:0)
您还可以将变量设置为hive命令的参数:
hive --hivevar cal_month_end='2012-01-01' -e "select '${cal_month_end}';"