Hive FAILED:ParseException第2:0行无法识别'' macaddress'''''''' ' CHAR' '('在列规范中

时间:2015-08-24 20:43:09

标签: hadoop hive hadoop-streaming

我尝试过hive -v -f sqlfile.sql

以下是文件的内容

CREATE TABLE UpStreamParam (
'macaddress' CHAR(50),
'datats' BIGINT,
'cmtstimestamp' BIGINT,
'modulation' INT,
'chnlidx'   INT,
'severity' BIGINT,
'rxpower'  FLOAT,
'sigqnoise' FLOAT,
'noisedeviation'  FLOAT,
'prefecber'  FLOAT,
'postfecber'  FLOAT,
'txpower'  FLOAT,
'txpowerdrop' FLOAT,
'nmter'  FLOAT,
'premtter'  FLOAT,
'postmtter'  FLOAT,
'unerroreds'  BIGINT,
'corrected'  BIGINT,
'uncorrectables'  BIGINT)
STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY","orc.bloom.filters.columns"="macaddress")
PARTITIONED BY ('cmtsid' CHAR(50),' date' INT)
LOCATION '/usr/hive/warehouse/UpStreamParam' ;

我收到以下错误:

  

失败:ParseException行2:0无法识别'&mac;地址'''''''' ' CHAR' '('列规范

2 个答案:

答案 0 :(得分:11)

首先,列名必须用`(反引号)包围,而不是'(单引号)。

因此,您必须将'macaddress'替换为`macaddress`以及所有其他列名称。

其次,STORED ASTBLPROPERTIES以及PARTITIONED BYLOCATION的顺序是错误的。 正确的顺序是PARTITIONED BYSTORED ASLOCATIONTBLPROPERTIES

有关详细信息,请参阅hive语言手册。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

所以正确的代码是

CREATE TABLE UpStreamParam (
`macaddress` CHAR(50),
`datats` BIGINT,
`cmtstimestamp` BIGINT,
`modulation` INT,
`chnlidx`   INT,
`severity` BIGINT,
`rxpower`  FLOAT,
`sigqnoise` FLOAT,
`noisedeviation`  FLOAT,
`prefecber`  FLOAT,
`postfecber`  FLOAT,
`txpower`  FLOAT,
`txpowerdrop` FLOAT,
`nmter`  FLOAT,
`premtter`  FLOAT,
`postmtter`  FLOAT,
`unerroreds`  BIGINT,
`corrected`  BIGINT,
`uncorrectables`  BIGINT)
PARTITIONED BY (`cmtsid` CHAR(50), `date` INT)
STORED AS ORC
LOCATION '/usr/hive/warehouse/UpStreamParam'
TBLPROPERTIES ("orc.compress"="SNAPPY","orc.bloom.filters.columns"="macaddress");

答案 1 :(得分:0)

问题可能是因为Hive版本,其中Hive版本 0.13 支持CHAR数据类型。

如果您使用的是较低版本,请尝试使用string/varchar数据类型。

请参考, https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-Char