【发布时间】:2016-04-06 06:03:10
【问题描述】:
当我尝试使用以下命令创建表时
**
如果不存在股票,则创建外部表(交换字符串,符号 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 '/data/stocks';
**
显示错误:
NoViableAltException(96@[]) 在 org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.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(Method.java:606) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:212) 失败: ParseException line 2:0 无法识别“exchange”附近的输入 'string' ',' 在列规范中
但是当我用反引号包围列名时..它可以工作..
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/';
有人能解释一下这背后的逻辑吗?
【问题讨论】: