【问题标题】:Set variables in hive scripts using command line使用命令行在配置单元脚本中设置变量
【发布时间】:2016-03-23 17:31:43
【问题描述】:

我已经检查了相关线程 - How to set variables in HIVE scripts

在 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.IllegalArgumentException:无法从以下位置创建路径 一个空字符串 在 org.apache.hadoop.fs.Path.checkPathArg(Path.java:131) 在 org.apache.hadoop.fs.Path.(Path.java:139) 在 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) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1469) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    您必须转义几个字符。这对我有用。

    hive -e "set hivevar:cal_month_end=\'2012-01-01\';select '\${cal_month_end}';"
    

    【讨论】:

    • 嗨@Durga,我已经尝试过您提供的命令,但错误消息与之前完全相同。任何想法为什么?
    • 您使用的是哪个版本的 hive,操作系统是什么?
    • Hive 版本是 Hive 0.13.0-mapr-1501。操作系统是linux 2.6.32-504.12.2.el6.x86_64
    【解决方案2】:

    您必须正确获取"'
    使用这个:
    hive -e 'set hivevar:cal_month_end="2012-01-01";select ${cal_month_end};'

    【讨论】:

    • 尝试使用hive --hiveconf hive.root.logger=DEBUG,console 运行它并将输出粘贴到此处。
    【解决方案3】:

    我终于知道出了什么问题。问题出在命令行中,我不能只选择一些东西,它需要从某个表中选择。下面工作正常。

    $ hive -e "set hivevar:cal_month_end='2012-01-01';select * from foo where start_time > '${cal_month_end}' limit 10"
    

    【讨论】:

      【解决方案4】:

      您还可以将变量设置为 hive 命令的参数:

      hive --hivevar cal_month_end='2012-01-01' -e "select '${cal_month_end}';"
      

      【讨论】:

      • 是的,我也试过了。但在我的系统中选择'${cal_month_end}';不管用。它总是会出现“无法从空字符串创建路径”错误。我需要像这样使用它 - select * from table1 where a > '${cal_month_end}';知道为什么吗?
      猜你喜欢
      • 2012-01-01
      • 2013-08-08
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2022-10-21
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多