Hive ParseException - 无法识别'end'字符串附近的输入 [英] Hive ParseException - cannot recognize input near 'end' 'string'

查看:2564
本文介绍了Hive ParseException - 无法识别'end'字符串附近的输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  NoViableAltException(88 @ [])
at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:9123)
at org.apache.hadoop.hive.ql.parse.HiveParser.identifier (HiveParser.java:30750)
...更多堆栈跟踪...
FAILED:ParseException行1:77在列规范$ b $中无法识别'end''string''附近的输入b

查询看起来像这样(简化以保护无辜):

  CREATE EXTERNAL TABLE moveProjects(cid字符串,结束字符串,类别字符串)
STORED BY'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES(dynamodb.table.name=Projects,
dynamodb.column.mapping=cid:cid,end:end,category:category);

基本上,我试图创建一个Hive表,其中包含 Projects DynamoDB表,但create语句抛出Hive / Hadoop的解析错误。

解决方案

这个问题其实不是一个语法错误,Hive ParseException只是由Hive中的保留关键字引起的(在这种情况下, end )。



解决方案:在违规列名称周围使用反引号:

pre $ CREATE EXTERNAL TABLE moveProjects(cid string ,'end'string,category string)
STORED BY'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES(dynamodb.table.name=Projects,
dynamodb.column.mapping=cid:cid,end:end,category:category);

通过在 end 附加反引号,查询按预期工作。



Amazon Hive中的保留字(截至2013年2月):




IF,HAVING,WHERE,SELECT,UNIQUEJOIN,JOIN,ON,TRANSFORM,MAP,REDUCE,TABLESAMPLE,CAST,FUNCTION,EXTENDED,CASE,WHEN,ELSE,END,DATABASE,CROSS


资料来源:来自Facebook Phabricator追踪器的此Hive门票

I am getting the following error when trying to create a Hive table from an existing DynamoDB table:

NoViableAltException(88@[])
at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:9123)
at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:30750)
...more stack trace...
FAILED: ParseException line 1:77 cannot recognize input near 'end' 'string' ',' in column specification

The query looks like this (simplified to protect the innocent):

CREATE EXTERNAL TABLE moveProjects (cid string, end string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");

Basically, I am trying to create a Hive table containing the contents of the Projects DynamoDB table, but the create statement is throwing a parse error from Hive / Hadoop.

解决方案

The issue isn't actually a syntax error, the Hive ParseException is just caused by a reserved keyword in Hive (in this case, end).

The solution: use backticks around the offending column name:

CREATE EXTERNAL TABLE moveProjects (cid string, `end` string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");

With the added backticks around end, the query works as expected.

Reserved words in Amazon Hive (as of February 2013):

IF, HAVING, WHERE, SELECT, UNIQUEJOIN, JOIN, ON, TRANSFORM, MAP, REDUCE, TABLESAMPLE, CAST, FUNCTION, EXTENDED, CASE, WHEN, THEN, ELSE, END, DATABASE, CROSS

Source: This Hive ticket from the Facebook Phabricator tracker

这篇关于Hive ParseException - 无法识别'end'字符串附近的输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆