当我尝试使用以下命令创建表时
**
如果不存在股票(交换字符串、符号字符串、ymd字符串、price\u open float、price\u high float、price\u low float、price\u close float、volume int、price\u adj\u close float)行格式分隔字段,以“,”location“/data/stocks”结尾;
**
显示错误:
org.apache.hadoop.hive.ql.parse.hiveparser\u identifiersparser.identifier(hiveparser\u identifiersparser)上的noviableexception(96@[])。java:11627)在org.apache.hadoop.hive.ql.parse.hiveparser.identifier(hiveparser。java:40133)在org.apache.hadoop.hive.ql.parse.hiveparser.columnnametype(hiveparser。java:34747) ... .. .. .. .. 在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606)在org.apache.hadoop.util.runjar.main(runjar。java:212)失败:parseexception行2:0无法识别“exchange”附近的输入列规范中的“字符串“”,”
但是当我把列名用反记号围起来的时候。。它起作用了。。
CREATE EXTERNAL TABLE IF NOT EXISTS stocks(
`exchange` STRING,
`symbol` STRING,
`ymd` STRING,
`price_open` FLOAT,
`price_high` FLOAT,
`price_low` FLOAT,
`price_close` FLOAT,
`volume` INT,
`price_adj_close` FLOAT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/in/stocks/';
有人能解释一下这背后的逻辑吗?
1条答案
按热度按时间j5fpnvbx1#
在hive0.12及更早版本中,表名和列名中只允许使用字母数字和下划线字符。
在hive 0.13及更高版本中,列名可以包含任何unicode字符(请参阅hive-6013)。在backticks(`)中指定的任何列名都按字面意义处理。
您可以参考:https://issues.apache.org/jira/browse/hive-6013
希望这有帮助!