• Hive 自定义数据格式


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

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

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

    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 ‘....’可以指定具体语句。

    关注公众号 海量干货等你
  • 相关阅读:
    宋体、新宋体、仿宋体
    单例模式————你就是我的唯一
    极乐净土代码——第一辑
    泛函是个什么概念
    http和https的区别
    get和post的区别
    浏览器输入URL按回车后都经历了什么?
    求两个列表的交集、并集、差集
    使用lamdba函数对list排序
    乐观锁和悲观锁的区别
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734268.html
Copyright © 2020-2023  润新知