我已经检查了相关的线程-如何在HIVE脚本中设置变量
在蜂箱内部,变量运行良好:
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.IollegalArgumentException:无法从创建路径空字符串网址:org.apache.hoop.fs.Path.checkPathArg(Path.java:131)网址:org.apache.hoop.fs.Path.(Path.java:139)网址:org.apache.hadop.hive.ql.io.HiveInputFormat$HiveInputSplit.getPath(HiveInputForm.java:110)网址:org.apache.hadop.mapred.MapTask.updateJobWithSplit(MapTask.java:463)网址:org.apache.hadop.mapred.MapTask.runOldMapper(MapTask.java:411)网址:org.apache.hadop.mapred.MapTask.run(MapTask.java:347)网址:org.apache.hadop.mapred.YarnChild$2.run(YarnChild.java:167)位于java.security.AccessController.doPrivileged(本机方法)位于javax.security.auth.Subject.doAs(Subject.java:415)网址:org.apache.hadop.security.UserGroupInformation.doAs(UserGroupInformation.java:1469)网址:org.apache.hadop.mapred.YarnChild.main(YarnChild.java:162)
您必须转义几个字符。这对我有用。
hive -e "set hivevar:cal_month_end='2012-01-01';select '${cal_month_end}';"
您必须正确处理"
和'
使用此:hive -e 'set hivevar:cal_month_end="2012-01-01";select ${cal_month_end};'
我终于知道出了什么问题。问题是在命令行中,我不能只选择一些东西,它需要从某个表中选择。下面工作正常。
$ hive -e "set hivevar:cal_month_end='2012-01-01';select * from foo where start_time > '${cal_month_end}' limit 10"
您还可以将变量设置为配置单元命令的参数:
hive --hivevar cal_month_end='2012-01-01' -e "select '${cal_month_end}';"