美文网首页
Metastore格式和分隔符

Metastore格式和分隔符

作者: 此间少年仍犹在 | 来源:发表于2019-02-25 16:06 被阅读0次

     Hive目前支持的数据格式包括Text File、SequenceFile、RCFile、Avro、ORC 和Parquet,同时可以自定义INPUTFORMAT和OUTPUTFORMAT来支持其他格式。
    https://cwiki.apache.org/confluence/display/Hive/FileFormats
     具体到某种数据格式,Hive是如何进行支持的呢?主要涉及INPUTFORMAT/OUTPUTFORMAT、SerDe分片(Split)和记录(Record)等概念。
     具体来说,分片被划分为若干个记录;每条记录就是一个键值对,对应一行。InputFormat将输入文件生成分片,并将分片分割成记录。SerDe是SerializerDeserializer的缩写。以Hive读取HDFS文件为例,会有以下处理:
    1)调用InputFormat,将文件生成分片并分割成记录;
    2)调用SerDe的Deserializer,将一行(Row),切分为各个字段。
     Hive向HDFS写入文件时,顺序相反。大体流程如下所示:
    HDFS files --> InputFileFormat --> Deserializer --> Row object --> Serializer --> OutputFileFormat --> HDFS files

    Hive读写记录
    1、INPUTFORMAT/OUTPUTFORMAT

    通常,Hive中的建表语句如下:

    CREATE TABLE my_table(a string, b string, ...)
    COMMENT 'This is the page view table'
    PARTITIONED BY(dt STRING, country STRING)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\001'
    WITH SERDEPROPERTIES (
       "separatorChar" = "\t",
       "quoteChar"     = "'",
       "escapeChar"    = "\\"
    )  
    STORED AS TEXTFILE;
    
    Hive数据表
     INPUTFORMAT/OUTPUTFORMAT对应创建表时的STORED AS语句,如果自定义编写的INPUTFORMAT/OUTPUTFORMAT,在创建表时可以写成STORED AS INPUTFORMAT '<packagepath.classname>' OUTPUTFORMAT '<packagepath.classname>' 的形式。
     Hive中支持的format参照https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormats
    2、SerDes

     官方wikihttps://cwiki.apache.org/confluence/display/Hive/SerDe
     TEXTFILE格式使用默认的SerDe,LazySimpleSerDe。
     Hive中支持的SerDe参照https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RowFormats&SerDe

     总结:Metastore对文件格式的支持基于以上概念和原理,如果有自定义格式的需求(以JSON为例),无论基于现有的开源方案,还是自定义编写,都是可以的。

    相关文章

      网友评论

          本文标题:Metastore格式和分隔符

          本文链接:https://www.haomeiwen.com/subject/ichgyqtx.html