【问题标题】:Issue while creating a table in Hive在 Hive 中创建表时出现问题
【发布时间】: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/';

有人能解释一下这背后的逻辑吗?

【问题讨论】:

    标签: apache hadoop hive


    【解决方案1】:

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

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-23
      • 2021-09-03
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2013-01-16
      • 2018-07-10
      • 2015-05-18
      相关资源
      最近更新 更多