使用命令行

时间:2015-12-17 09:47:03

标签: hadoop hive

我已查看相关帖子 - 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)

4 个答案:

答案 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}';"