zoukankan      html  css  js  c++  java
  • 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 ‘....’可以指定具体语句。

    关注公众号 海量干货等你
  • 相关阅读:
    Alfred上可提高工作效率的Workflow推荐
    局部性原理——各类优化的基石
    持续学习——程序猿的军备竞赛
    http://regex.alf.nu/ 非标准答案
    13总结
    Ubuntu下python安装mysqldb(驱动)
    北大ACM试题分类+部分解题报告链接
    poj 3253 Fence Repair(优先队列+huffman树)
    Centos/Fedora下安装Twisted,failed with error code 1 in /tmp/pip-build-H1bj8E/twisted/解决方法
    关于command 'gcc' failed with exit status 1 解决方法
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734268.html
Copyright © 2011-2022 走看看