- 作者:老汪软件技巧
- 发表时间:2024-01-02 15:00
- 浏览量:
&&大数据学习&& ?系列专栏: ?哲学语录: 承认自己的无知,乃是开启智慧的大门
?如果觉得博主的文章还不错的话,请点赞?+收藏⭐️+留言?支持一下博>主哦? Hive文件格式
为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择、orc、、 file等。
文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。
可通过以下建表语句指定文件格式为文本文件:
create table textfile_table
(column_specs)
stored as textfile;
ORC
1)文件格式
ORC( Row )是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。
与列式存储相对的是行式存储,下图是两者的对比:
如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。
(1)行存储的特点
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
(2)列存储的特点
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
前文提到的text file和 file都是基于行存储的,orc和是基于列式存储的。
每个Orc文件由、Body和Tail三部分组成。
其中内容为ORC,用于表示文件类型。
Body由1个或多个组成,每个一般为HDFS的块大小,每一个包含多条记录,这些记录按照列进行独立存储,每个里有三部分组成,分别是Index Data,Row Data, 。
Index Data:一个轻量级的index,默认是为各列每隔1W行做一个索引。每个索引会记录第n万行的位置,和最近一万行的最大值和最小值等信息。
Row Data:存的是具体的数据,按列进行存储,并对每个列进行编码,分成多个来存储。
:存放的是各个的位置以及各的编码信息。
Tail由和组成。File 中保存了各的其实位置、索引长度、数据长度等信息,各的统计信息等;记录了整个文件的压缩类型以及File 的长度信息等。
在读取ORC文件时,会先从最后一个字节读取长度,进而读取到,从里面解析到File 长度,进而读取,从中解析到各个信息,再读各个,即从后往前读。
3)建表语句
create table orc_table
(column_specs)
stored as orc
tblproperties (property_name=property_value, ...);
ORC文件格式支持的参数如下:
参数
默认值
说明
press
ZLIB
压缩格式,可选项:NONE、ZLIB,、
press.size
262,144
每个压缩块的大小(ORC文件是分块压缩的)
orc..size
67,108,864
每个的大小
orc.row.index.
10,000
索引步长(每隔多少行数据建一条索引)
文件是生态中的一个通用的文件格式,它也是一个列式存储的文件格式。
上图展示了一个文件的基本结构,文件的首尾都是该文件的Magic Code,用于校验它是否是一个文件。
首尾中间由若干个和一个()组成。
每个包含多个,每个包含多个Page。以下是、和Page三个概念的说明:
行组(Row Group):一个行组对应逻辑表中的若干行。
列块( Chunk):一个行组中的一列保存在一个列块中。
页(Page):一个列块的数据会划分为若干个页。
()中存储了每个行组()中的每个列快()的元数据信息,元数据信息包含了该列的数据类型、该列的编码方式、该类的位置等信息。
3)建表语句
Create table parquet_table
(column_specs)
stored as parquet
tblproperties (property_name=property_value, ...);
支持的参数如下:
参数
默认值
说明
压缩格式,可选项:,,gzip,lzo,,lz4
.block.size
行组大小,通常与HDFS块大小保持一致
.page.size
页大小