使用命令行在配置单元脚本中设置变量



我已经检查了相关的线程-如何在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}';"

最新更新