[特性]Hive使用GBK等非UTF8字符集 2015-12-11 21:30

说明

Hive默认是所有文件都是UTF8的。Hive将按照UTF8编码格式对数据文件进行解析和查询。

如果数据文件不是UTF8,则需要SerDe支持指定编码格式。对于常用的LazySimpleSerDe是支持指定字符集的。

SerDe is a short name for “Serializer and Deserializer.”
Hive uses SerDe (and !FileFormat) to read and write table rows.
HDFS files –> InputFileFormat –> –> Deserializer –> Row object
Row object –> Serializer –> –> OutputFileFormat –> HDFS files

使用

指定SerDe和字符集。

1
2
3
4
CREATE EXTERNAL TABLE student8(id STRING, name STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES("field.delim"=',',"serialization.encoding"='GBK')
LOCATION '/data/student8/';

注意:为指定字符集,必须显式指定SERDE的类。指定SerDe类后,则不允许使用"FIELDS TERMINATED BY",而是要显式通过"field.delim"属性指定分隔符。

Tags: #Hive    Post on Hadoop