异常信息:MetaException(message:Add request failed : INSERT INTO COLUMNS_V2
(CD_ID
,COMMENT
,COLUMN_NAME
,TYPE_NAME
,INTEGER_IDX
) VALUES (?,?,?,?,?) )
报错背景: Hive创建带有中文字段的表。
解决办法: 修改Mysql的COLUMNS_V2表中各字段的字符集为utf8
ALTER TABLE `COLUMNS_V2` CHANGE `COMMENT` `COMMENT` VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
ALTER TABLE `COLUMNS_V2` CHANGE `COLUMN_NAME` `COLUMN_NAME` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
ALTER TABLE `COLUMNS_V2` CHANGE `TYPE_NAME` `TYPE_NAME` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
如果修改后未生效,请检查hive-site.xml中连接Mysql的javax.jdo.option.ConnectionURL
处是否缺少characterEncoding=UTF-8&
,添加后重启hive再尝试进行添加;
由于我们使用的是spark-on-hive,所以在spark处的hive配置文件也同样要修改,修改完成后重启thriftserver
造成原因: hive默认创建的mysql对应表字符集为latin1。