hive建表的时候用 date 作为字段名,系统报错,求问?

lisn8271 2017-09-24 12:54:53
在hive中,进行如下建表语句操作
CREATE TABLE storebydate(  
name STRING,
age INT,
address STRING
)
PARTITIONED BY(date STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' ;

结果:
FailedPredicateException(identifier,{useSQL11ReservedKeywordsForIdentifier()}?)
at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:13717)
at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:55168)
at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameType(HiveParser.java:43457)
at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeList(HiveParser.java:39194)
at org.apache.hadoop.hive.ql.parse.HiveParser.tablePartition(HiveParser.java:35425)
at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6375)
at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:3821)
at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1870)
at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1213)
at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:204)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)
at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:453)
at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1252)
at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1394)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1181)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1171)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:821)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
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 6:15 Failed to recognize predicate 'date'. Failed rule: 'identifier' in column specification

提示
FAILED: ParseException line 6:15 Failed to recognize predicate 'date'. Failed rule: 'identifier' in column specification

但是如果把建表语句里的date 换成别的名字,就可以,比如换成 dae
CREATE TABLE storebydate(  
name STRING,
age INT,
address STRING
)
PARTITIONED BY(dae STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' ;

结果
OK
Time taken: 0.1 seconds


多次测试后,发现date只要作为字段名出现,就报错,把date换成别的字符,就可以成功,请问这是为什么呢?
...全文
2013 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisn8271 2017-09-25
  • 打赏
  • 举报
回复 1
引用 4 楼 sinat_28984567 的回复:
date 是关键字所以报错了,可以加上tab 键上边那个上引号,和MySQL 的一样。
谢谢,搞定了~~~
二月十六 2017-09-24
  • 打赏
  • 举报
回复
date 是关键字所以报错了,可以加上tab 键上边那个上引号,和MySQL 的一样。
听雨停了 2017-09-24
  • 打赏
  • 举报
回复
引用 2 楼 lisn8271 的回复:
[quote=引用 1 楼 qq_37170555 的回复:] 应该是date是关键字,所以不能做字段,你把date用中括号包起来,比如这样[date]应该就可以了。至少在sql数据库是这样,你这个数据库多半也是关键字的问题。
哦,测试了,不行,只要有这个date就是不行[/quote] 刚查了下hive中关键字不是用中括号,要用反引号,比如这样`date` string这样就可以,你再试试看。你复制我发给你的应该就可以,如果不是这个就用单引号试试
lisn8271 2017-09-24
  • 打赏
  • 举报
回复
引用 1 楼 qq_37170555 的回复:
应该是date是关键字,所以不能做字段,你把date用中括号包起来,比如这样[date]应该就可以了。至少在sql数据库是这样,你这个数据库多半也是关键字的问题。
哦,测试了,不行,只要有这个date就是不行
听雨停了 2017-09-24
  • 打赏
  • 举报
回复
应该是date是关键字,所以不能做字段,你把date用中括号包起来,比如这样[date]应该就可以了。至少在sql数据库是这样,你这个数据库多半也是关键字的问题。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧