在Hive中创建表时出现问题

时间:2016-04-06 06:03:11

标签: apache hadoop hive

当我尝试使用以下命令创建表时

**

  

创建外部表如果不存在股票(交易STRING,符号   STRING,ymd STRING,price_open FLOAT,price_high FLOAT,price_low   FLOAT,price_close FLOAT,交易量INT,price_adj_close FLOAT)行   格式删除字段由','终止LOCATION' / data / stocks';

**

显示错误:

  

NoViableAltException(96 @ [])at   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:11627)at at   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(Method.java:606)at   org.apache.hadoop.util.RunJar.main(RunJar.java:212)失败:   ParseException行2:0无法识别交换附近的输入'   '串' ','在列规范

但是当我用反引号包围列名时......它可以工作..

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 个答案:

答案 0 :(得分:1)

在Hive 0.12及更早版本中,表名和列名中只允许使用字母数字和下划线字符。

在Hive 0.13及更高版本中,列名可以包含任何Unicode字符(请参阅HIVE-6013)。在反引号(`)中指定的任何列名都按字面处理。

您可以参考:https://issues.apache.org/jira/browse/HIVE-6013

希望这有帮助!