Metastore格式和分隔符

 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 '' OUTPUTFORMAT '' 的形式。
 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格式和分隔符)