解析配置单元查询

时间:2016-02-15 18:01:50

标签: hadoop hive hiveql

我要求使用hive-exex jar中的以下类来解析hive查询         org.apache.hadoop.hive.ql.parse.ParseDriver,org.apache.hadoop.hive.ql.parse.ASTNode,org.apache.hadoop.hive.ql.parse.ParseUtils,org.apache.hadoop.hive。 ql.parse.HiveParser。

    for accessing these classes from hive-exec jar i am using following maven dependency in my project :

<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-exec</artifactId>
  <version>0.13.1-cdh5.3.0</version>
</dependency>

我的hive查询解析实用程序几乎适用于所有情况,但令人惊讶的是它在以下查询的情况下失败:

INSERT INTO db_lineage.many_one_hv SELECT * FROM(SELECT * FROM db_lineage.one_many1_hv UNION ALL SELECT * FROM db_lineage.one_many2_hv)FINAL;

此查询在版本为0.14和1.2的hive集群上成功执行,但在我的本地系统中,我的本地系统失败。我得到的异常如下: NoViableAltException(281 @ [])     在org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:36959)     在org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:36865)     在org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.subQuerySource(HiveParser_FromClauseParser.java:5463)     在org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromSource(HiveParser_FromClauseParser.java:3931)     在org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.joinSource(HiveParser_FromClauseParser.java:1798)     at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromClause(HiveParser_FromClauseParser.java:1456)     在org.apache.hadoop.hive.ql.parse.HiveParser.fromClause(HiveParser.java:40272)     在org.apache.hadoop.hive.ql.parse.HiveParser.singleSelectStatement(HiveParser.java:38160)     在org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:37845)     在org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:37745)     at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:36989)     在org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:36865)     在org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1332)     在org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1030)     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:199)     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:161)     在com.abc.bigsuite.parser.ECatHiveParser.parse(ECatHiveParser.java:39)     在com.abc.bigsuite.parser.HiveParserTest.testIssue1(HiveParserTest.java:494)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)     在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)     在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)     在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)     在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

[ERROR] com.datametica.bigsuite.parser.ECatHiveParser - 解析上述查询时出现异常 org.apache.hadoop.hive.ql.parse.ParseException:line 1:12 missing at&#39; db_lineage&#39;靠近&#39;(&#39;在子查询源中 第1:50行无法识别附近的&#39;(&#39;&#39; SELECT&#39;&#39; *&#39;在子查询源中     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202)〜[hive-exec-0.13.1-cdh5.3.0.jar:0.13.1-cdh5.3.0]     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)〜[hive-exec-0.13.1-cdh5.3.0.jar:0.13.1-cdh5.3.0]     在org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:161)〜[hive-exec-0.13.1-cdh5.3.0.jar:0.13.1-cdh5.3.0]     在com.abc.bigsuite.parser.ECatHiveParser.parse(ECatHiveParser.java:39)〜[classes /:na]     在com.abc.bigsuite.parser.HiveParserTest.testIssue1(HiveParserTest.java:494)[test-classes /:na]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_80]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)〜[na:1.7.0_80]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)〜[na:1.7.0_80]     at java.lang.reflect.Method.invoke(Unknown Source)〜[na:1.7.0_80]     在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)[junit-4.12.jar:4.12]     在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)[junit-4.12.jar:4.12]     在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)[junit-4.12.jar:4.12]

我从不连接到hive集群或任何数据库,我的实用程序是hive查询的独立解析,只能通过使用hive-exec依赖项从中检索源节点和目标节点。请告诉我你是否可以提供任何输入

谢谢和问候, Mahendra Tonape。

1 个答案:

答案 0 :(得分:1)

Stefan,感谢您的回答,在我的实用程序中我从未连接到hive数据存储区或数据库我使用hive-exec依赖项解析配置单元查询并提取源和目标表因此无论如何我都没有检查表是否存在通过将hive-exec依赖项升级到1.2.1以及我发布的hive-exec 1.2.1版本的查询工作正常来解决此问题。