问题解决-Hive创建汉字字段表时,报错org.apache.hadoop.hive.ql.exec.DDLTask. MetaException
项目场景:在大数据集群场景中,需求方(客户)会给你提出很多奇葩问题,让一个大数据职场小白的我为之抓狂,在一顿挠心之后,还得想办法去满足需求方提出的需求前不久我的需求方就是我们CDH集群的使用方-数据应用开发团队给我出了个难题,说业务部门想要使用汉语字段的表使用,也就是表结构中字段名称必须是汉语,俗话说,中国文化博大精深,汉语最为精髓。汉语考试:1.“小明,今晚有思修课,你去不去?”,“我去!我不去
项目场景:
在大数据集群场景中,需求方(客户)会给你提出很多奇葩问题,让一个大数据职场小白的我为之抓狂,在一顿挠心之后,还得想办法去满足需求方提出的需求
前不久我的需求方就是我们CDH集群的使用方-数据应用开发团队给我出了个难题,说业务部门想要使用汉语字段的表使用,也就是表结构中字段名称必须是汉语,俗话说,中国文化博大精深,汉语最为精髓。
汉语考试:
1.“小明,今晚有思修课,你去不去?”,“我去!我不去!”,问小明到底去不没去?
2.“小明,窗台上落了鸟屎,去擦一下好吗?”,“我擦,我不擦”,问小明到底擦不擦?
不瞎扯了,进入正题
环境描述
CDH6.2.0
Hive2.1.1
MySQL5.7.19
需求,用户想要使用以汉语为字段的表;
例如
姓名 | 年龄 | 性别 | 住址 |
---|---|---|---|
小明 | 19 | 男 | 北京 |
小红 | 17 | 女 | 上海 |
小李 | 20 | 男 | 广州 |
小王 | 18 | 男 | 深圳 |
问题描述:
我们知道Hive是可以使用中文作为字段名的,使用符号``进行处理就可以实现。以下为创建表的语句:
CREATE EXTERNAL TABLE stu(
`姓名` STRING,
`年龄` INT,
`性别` STRING,
`地址` STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'hdfs://hadoop01:9000/dome'
在hive shell中执行以上语句报错信息如下:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Add request failed : INSERT INTO `COLUMNS_V2` (`CD_ID`,`COMMENT`,`COLUMN_NAME`,`TYPE_NAME`,`INTEGER_IDX`) VALUES (?,?,?,?,?) )
原因分析:
从报错信息中分析,推断是在执行建表语句时,hive的元数据进行更新时,需要向元数据存储数据库MySQL中插入表结构信息。报错信息中说明:在向MySQL中的表COLUMNS_V2中插入字段名称时出现的问题。
通过命令查看COLUMNS_V2表的字符集信息
show create table COLUMNS_V2\G;
查询表的字符集会发现,COLUMNS_V2表中COLUMN_NAME字段的字符集为默认字符集,latin1字符集,所以中文无法识别,因此需要使用utf8字符集。
解决方案:
分析了一波之后,基本定位到问题的根本原因,对症下药即可。
通过SQL命令将字段字符集修改为utf8
alter table COLUMNS_V2 modify column COLUMN_NAME varchar(128) character set utf8;
结语:如若文章有何不妥之处欢迎指正,谢谢!
更多推荐
所有评论(0)