Hive ParseException - 无法识别 'endstring' 附近的输入


尝试

从现有 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");

基本上,我正在尝试创建一个包含 Projects DynamoDB 表内容的 Hive 表,但 create 语句从 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 月):

如果, 有, 在哪里, 选择, 唯一连接, 连接, 打开, 转换,

映射, 减少, 表样本, 转换, 函数, 扩展, 大小写, 何时, 然后, 否则, 结束, 数据库, 交叉

来源:来自Facebook Phabricator追踪器的蜂巢票

如果您仍想使查询正常工作,则始终可以转义保留关键字!!

只需将 end 替换为"end"

以下是保留关键字的列表https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

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

我在进行插入覆盖时在文件夹路径中使用了/Date=20161003,但它失败了。我将其更改为/Dt=20161003 并且它有效

我通过这样做解决了这个问题:

插入my_table(my_field_0、...、my_field_n)值(my_value_0、...、my_value_n)

相关内容

  • 没有找到相关文章

最新更新