hvie列式存储ORC和parquet

一 行列存储的特点比较

1 行存储的特点

  查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

2 列式存储的特点

  因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

3 行存储与列存储的对比

  如下图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储
在这里插入图片描述

二 列式存储之ORC

  ORC文件的具体结构如下图所示:
在这里插入图片描述

1 ORC文件格式说明

  每个Orc文件由Header、Body和Tail三部分组成。
  其中Header内容为ORC,用于表示文件类型。
  Body由1个或多个stripe组成,每个stripe一般为HDFS的块大小,每一个stripe包含多条记录,这些记录按照列进行独立存储,每个stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer。
  Index Data:一个轻量级的index,默认是为各列每隔1W行做一个索引。每个索引会记录第n万行的位置,和最近一万行的最大值和最小值等信息。
  Row Data:存的是具体的数据,按列进行存储,并对每个列进行编码,分成多个Stream来存储。
  Stripe Footer:存放的是各个Stream的位置以及各column的编码信息。
  Tail由File Footer和PostScript组成。File Footer中保存了各Stripe的起始位置、索引长度、数据长度等信息,各Column的统计信息等;PostScript记录了整个文件的压缩类型以及File Footer的长度信息等。
  在读取ORC文件时,会先从最后一个字节读取PostScript长度,进而读取到PostScript,从里面解析到File Footer长度,进而读取FileFooter,从中解析到各个Stripe信息,再读各个Stripe,即从后往前读。

2 ORC建表语句

create table orc_table
(column_specs)
stored as orc
tblproperties (property_name=property_value, ...);

3 ORC文件格式支持的参数

  ORC文件格式支持的参数如下:

参数默认值说明
orc.compressZLIB压缩格式,可选项:NONE、ZLIB,、SNAPPY
orc.compress.size262,144每个压缩块的大小(ORC文件是分块压缩的)
orc.stripe.size67,108,864每个stripe的大小
orc.row.index.stride10,000索引步长(每隔多少行数据建一条索引)

三 列式存储之Parquet

  Parquet文件是Hadoop生态中的一个通用的文件格式,它也是一个列式存储的文件格式。
Parquet文件的格式如下图所示:
在这里插入图片描述

1 Parquet文件格式说明

  上图展示了一个Parquet文件的基本结构,文件的首尾都是该文件的Magic Code,用于校验它是否是一个Parquet文件。
  首尾中间由若干个Row Group和一个Footer(File Meta Data)组成。
  每个Row Group包含多个Column Chunk,每个Column Chunk包含多个Page。以下是Row Group、Column Chunk和Page三个概念的说明:
  行组(Row Group):一个行组对应逻辑表中的若干行。
  列块(Column Chunk):一个行组中的一列保存在一个列块中。
  页(Page):一个列块的数据会划分为若干个页。
  Footer(File Meta Data)中存储了每个行组(Row Group)中的每个列快(Column Chunk)的元数据信息,元数据信息包含了该列的数据类型、该列的编码方式、该类的Data Page位置等信息。

2 建表语句

create table parquet_table
(column_specs)
stored as parquet
tblproperties (property_name=property_value, ...);

3 Parquet文件支持的参数

  支持的参数如下:

参数默认值说明
parquet.compressionuncompressed压缩格式,可选项:uncompressed,snappy,gzip,lzo,brotli,lz4
parquet.block.size134217728行组大小,通常与HDFS块大小保持一致
parquet.page.size1048576页大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值