zoukankan      html  css  js  c++  java
  • hive -e执行出现「cannot recognize input near '<EOF>' in select clause」问题

    问题现象

    写了一个简单的shell脚本调用hive执行组装的sql,在执行时总是报cannot recognize input near '<EOF>' in select clause错误,
    单独在hive提示符下却能正常执行。

    #!/bin/bash
    keyname="type"
    sql=" 
    select tags['$keyname'] from user_tags
    "
    
    echo ${sql}
    
    hive -e ${sql}
    

    执行时打印的错误日志:

    select tags['$keyname'] from user_tags
    
    Logging initialized using configuration in jar:file:/opt/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
    NoViableAltException(-1@[])
    	at org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectClause(HiveParser_SelectClauseParser.java:1087)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:45827)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:41495)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:41402)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:40413)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:40283)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1590)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1109)
    	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202)
    	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)
    	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:396)
    	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:308)
    	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1122)
    	at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1170)
    	at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059)
    	at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)
    	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:213)
    	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:165)
    	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:376)
    	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:311)
    	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:708)
    	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
    	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    	at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    FAILED: ParseException line 1:6 cannot recognize input near '<EOF>' '<EOF>' '<EOF>' in select clause
    

    解决方案

    修改hive -e ${sql}hive -e "${sql}"

    原因分析

    若没有使用双引号进行包括,则"hive -e"会认为后面的sql内容解析为多个参数造成错误。而使用双引号后,整个sql将作为一个单独的参数传给hive。

  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/shenfeng/p/shell_hive_e_error.html
Copyright © 2011-2022 走看看