一、FileFormate?
hive数仓和mysql、clickhouse一类的数据库不同,hive表的数据是存储在hdfs文件系统中的,它底层的存储文件可以是多种数据格式,目前hive支持的文件格式有: ?? ?Text File ?? ?SequenceFile ?? ?RCFile ?? ?Avro Files ?? ?ORC Files ?? ?Parquet ?? ?Custom INPUTFORMAT and OUTPUTFORMAT 如果在建表或者更改表时没有显式指定hive要存储成的文件格式,那么默认是Text File文件格式。 不过可以通过配置hive.default.fileformat来更改默认的文件存储格式。
二、SerDe
SerDe是Serializer & DeSerializer的简称,是指数据写入hive表或者从hive表读取数据时的序列化和反序列化操作(控制文件数据和hive表中Row数据的转换)。其读写流程如下: read:HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object write: object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
三、FileFormat和SerDe的关系
File Format文件格式一般是在建表或更改表时显式声明hive表在hdfs文件系统中的存储格式, 一旦设置了某种文件存储格式后,当有数据写入hive表或者从hive表读取数据时需要先通过对应的SerDe对数据进行处理。
所以简单理解,可以将SerDe看做FileFormat的功能支持或实现,我们设置了FileFormat后,底层数据格式的转换是依赖SerDe来做的。但是实际上SerDe和FileFormat是两个独立的概念体系,在理解时千万不要混淆了。
SerDe分为序列化和反序列化,分别对应输入格式化(INPUTFORMAT)和输出格式化(OUTPUTFORMAT),所以在上述介绍hive支持的文件格式时有个Custom INPUTFORMAT and OUTPUTFORMAT选项,这个其实就是指hive允许自定义存储格式,只要我们自己实现其对应的输入格式化和输出格式化的操作就行。
参考:
FileFormats - Apache Hive - Apache Software Foundation
|