Hive-自定义文件格式

前面在讲述创建表的语句时,省略了一些内容,更加完整的语法如下

CREATE TABLE t1(...) STORED AS TEXTFILE;

最后的STORED AS 子句,指的是Hive数据文件的存储格式,这里使用的是TEXTFILE,还有SEQUENCEFILERCFile,一共三种。

TEXTFILE是最普通的文件存储格式,内容是可以直接查看。

SEQUCENFILE是包含键值对的二进制的文件存储格式,支持压缩,可以节省存储空间。是hadoop领域的标准文件格式,但是在hadoop之外却无法使用。

RCFile是列式存储文件格式,适合压缩处理。对于有成百上千字段的表而言,RCFile更加合适

 

我们知道,Hive的数据是存储在HDFS中。那么,以上三种文件存储格式,肯定有对应的InputFormat和OutputFormat来对应。

TEXTFILE对应的是org.apache.hadoop.mapred.TextInputFormat和org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

SEQUENCEFILE对应的是org.apache.hadoop.mapred.SequenceFileInputFormat和org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat。

RCFILE对应的是org.apache.hadoop.hive.ql.io.RCFileInputFormat和org.apache.hadoop.hive.ql.io.RCFileOutputFormat。

意味着,以上三种格式是对InputFormat和OutputFormat类的简写方式。

比如上面例子中的语句,我们可以用一下方式改写

CREATE TABLE t1(...) STORED AS INPUTFORMAT ‘org.apache.hadoop.mapred.TextInputFormat’OUTPUTFORMAT ‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’;

 

自定义输入格式,实现select * fromdual

 

上面讲的是数据存储格式。那么,对于HDFS数据文件中的记录,Hive是如何转换为字段的哪?这就是SerDe。一个SerDe包含了将一条记录的非结构化字节转化为Hive可以使用的一条记录的过程。

使用子句ROW FORMAT SERDE ‘....’可以指定具体语句

你可能感兴趣的:(hive)