当我尝试使用以下命令创建表时
**
创建外部表如果不存在股票(交易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/';
有人可以解释一下这背后的逻辑吗?
答案 0 :(得分:1)
在Hive 0.12及更早版本中,表名和列名中只允许使用字母数字和下划线字符。
在Hive 0.13及更高版本中,列名可以包含任何Unicode字符(请参阅HIVE-6013)。在反引号(`)中指定的任何列名都按字面处理。
您可以参考:https://issues.apache.org/jira/browse/HIVE-6013
希望这有帮助!