Hive使用GBK编码

原创
2017/02/28 16:08
阅读数 4.1K

Hive默认是所有文件都是UTF-8的。

Hive将按照UTF-8编码格式对数据文件进行解析和查询。
如果数据文件不是UTF-8,则需要SerDe支持指定编码格式。

对于常用的LazySimpleSerDe是支持指定字符集的。

待导入的数据文件:

/home/test/person.txt   //GBK编码文件

张三,18
李四,16
王五,20

建表语句(会有乱码):

create table t_person (
  name string,
  age int
)
row format delimited fields terminated by ',' stored as textfile;

导入本地数据:

load data local inpath '/home/test/person.txt' into table t_person;

以上情况会出现乱码。

通过以下2种方式可以解决乱码问题:

方法一、建表语句中指定SerDe类和字符集,如下语句为改造后:

create table t_person (
  name string,
  age int
)
row format serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
with serdeproperties('field.delim'=',', 'serialization.encoding'='GBK')
stored as textfile;

需要注意的是:

指定SerDe类后,则不允许使用"delimited fields terminated by",而是要显式通过"field.delim"属性指定分隔符。

 方法二、建表后修改字符集:

修改命令如下:

alter table t_person set serdeproperties ('serialization.encoding'='GBK');

 

以上两种方式仅供参考,可能会因为环境或版本问题效果不一样。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部