hive文件存储格式和分隔符

hive会为每个database创建对应的文件夹,表会在这个文件里面创建对应的子目录。表中的数据会以目录中的文件的形式存储起来。对于default数据库,默认的缺省数据库是没有自己的目录的,default数据库里面的表默认存储在/user/hive/warehouse里面。
hive常用的存储格式包括:TextFile SequenceFile RcFile OrcFile AvroFile Parquet。

TextFile

hive的默认存储格式,数据不做压缩,存储开销大,解析开销大。
可以结合BZIP2,GZIP ,snappy,LZO(系统自检,查询的是自动解压)等压缩来减少存储。但是要注意了snappy不支持切分,从而无法对数据做并行处理,lzo支持切分,可以并行处理。

SequenceFile

seqenceFile是hadoop api提供的一种二进制文件存储格式,具有使用方便,可分割可压缩的特点。
sequencefile支持三种压缩格式:NONE,RECORE,BLOCK,一般建议使用BLOCK。

RCFile

RcFile是hive提供的一种专门的面向列式存储的数据格式,它遵循先按列划分,在垂直划分的设计理念

orc

数据先按照行分快,每个快按照列存储,hive给出的新格式,属于RcFile的升级,性能大幅度的提升。数据可以压缩存储,压缩快,存取快。

parquet

Apache Parquent最初设计的动机是存储嵌套式数据,ProtocolBuff,thrift,json等,将这类数据存储为列式存储格式,以方便对其高效压缩和编码,且使用更少的IO操作,这也是Parquet相对于ORC的优势,他能透明的将被广泛使用的protobuf和thrift高效操作,但是其他的数据生成之后,不可以update,不支持ACID,这些orcfile都是支持的。

hive的默认文件的表存储格式

1.hive.default.fileformat.managed
默认值为none,所以取hive.default.fileformat
需要[none,textfile,sequencefile,rcfile,orc,parquet]之一。
CREATE TABLE语句的默认文件格式仅应用于托管表。外部表将使用指定的格式创建配置单元.default.fileformat. 保留此空值将导致使用配置单元.default.fileformat所有的表。
2.hive.default.fileformat
默认是textFile,这里大小写无关。
需要[textfile,sequencefile,rcfile,orc,parquet]之一。
CREATE TABLE语句的默认文件格式。用户可以通过创建表来显式重写它
stored as [textfile,sequencefile,rcfile,orc,parquet]之一

数据分割符

数据存储在文件里面,是需要分割符来判断行列的分割间隔的,hive默认使用了几个很少出现的分割符。

行分隔符

\n : 是hive用来分割行的,一般一条记录一行,在记录最后加上。

列分隔符

^A(ctrl+A): 列分隔符,每一行记录有多个列,列与列之间的分割使用,可以用\001表示。

复杂数据结构的元素分隔符

^B(ctrl+B):用于分割array和struct和map等复杂的数据结构里面的元素的分隔符,可以使用\002表示。

map的键值对分隔符

^C:用于分割map里面的key和vaule的。
存储格式在生产环境的中的使用是要根据具体的情况的,没有说那一种会最好的,只是在某些方面罢了。

你可能感兴趣的:(hive文件存储格式和分隔符)