Hive ParseException - 无法识别“结束”“字符串”附近的输入

2024-04-30

尝试从现有 DynamoDB 表创建 Hive 表时出现以下错误:

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

查询如下所示(为了保护无辜者进行了简化):

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");

基本上,我正在尝试创建一个包含以下内容的 Hive 表ProjectsDynamoDB 表,但创建语句从 Hive / Hadoop 抛出解析错误。


该问题实际上并不是语法错误,Hive ParseException 只是由 Hive 中的保留关键字引起的(在本例中,end).

解决方案:在有问题的列名称周围使用反引号:

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、变换、MAP、REDUCE、TABLESAMPLE、CAST、FUNCTION、EXTENDED、CASE、WHEN、THEN、ELSE、END、DATABASE、CROSS

Source: 这张来自 Facebook Phabricator 追踪器的 Hive 票证 https://reviews.facebook.net/D8397

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive ParseException - 无法识别“结束”“字符串”附近的输入 的相关文章

随机推荐