列式存储格式:Parquet

本文探讨列式存储的优势,特别是Parquet格式,它被广泛用于OLAP查询,支持多种查询引擎如Hive, Impala, Drill等。Parquet通过行组、列块和页的结构实现高效数据存储,利用列式存储的优势减少IO,并能自解析。同时,文章提及ORC文件格式作为另一种列式存储选择。" 136112946,1048757,视频号聊天记录撸收益:日赚500+的实战攻略,"['视频号', '内容营销', '流量变现', '社交媒体营销', '直播电商']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原作者:https://blog.youkuaiyun.com/yu616568/article/details/51868447

什么是列式存储

OLAP查询的特点,列式存储可以提升其查询性能,如何做到?

一般关系型数据库都是行存储,日常工作中我们又是仅需要某一列的数据,如果按行存储的化我们需要扫描每一行才能获取列。这样就大大的耗费了成本。而列式存储都是按列进行顺序存储的(每一列都是文件??)所以:

  • 查询时不需要扫描整行,仅查询需要的列,大大降低IO,而且可统计每列的min max sum等。
  • 每列成员都是同构的,针对不同类型可采用压缩降低IO
  • 每一列的成员的同构性,可以使用更加适合CPU pipeline的编码方式,减小CPU的缓存失效

                                                        行存储 对比 列存储

 

Parquet存储格式

兼容MP,spark,支持多种查询引擎 Hive,Impala,Drill等,

数据类型:

文件结构:

二进制方式存储,不可以直接读取和修改。可以自解析,文件中包含文件的数据和元数据。

  • HDFS块(Block):它是HDFS上的最小的副本单位,HDFS会把一个Block存储在本地的一个文件并且维护分散在不同的机器上的多个副本,通常情况下一个Block的大小为256M、512M等。
  • HDFS文件(File):一个HDFS的文件,包括数据和元数据,数据分散存储在多个Block中。
  • 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的行数,在一个HDFS文件中至少存储一个行组,Parquet读写的时候会将整个行组缓存在内存中,所以如果每一个行组的大小是由内存大的小决定的。
  • 列块(Column Chunk):在一个行组中每一列保存在一个列块中,行组中的所有列连续的存储在这个行组文件中。不同的列块可能使用不同的算法进行压缩。
  • 页(Page):每一个列块划分为多个页,一个页是最小的编码的单位,在同一个列块的不同页可能使用不同的编码方式。

通常情况下,在存储Parquet数据的时候会按照HDFS的Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度

数据访问:

列存储优势,获取原始数据时仅需要扫描需要的列,每一列的存储都是顺序的,避免扫描整个文件。

 

ORC文件格式

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值