大数据学习(7)-hive文件格式总结

news/2024/12/22 20:20:21/

&&大数据学习&&

🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博>主哦🤞


Hive文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。

Text File

文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。

可通过以下建表语句指定文件格式为文本文件:

create table textfile_table(column_specs)stored as textfile;

ORC

1)文件格式

ORC(Optimized Row Columnar)file format是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。

与列式存储相对的是行式存储,下图是两者的对比:

如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。

(1)行存储的特点

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

(2)列存储的特点

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

前文提到的text file和sequence file都是基于行存储的,orc和parquet是基于列式存储的。

每个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,即从后往前读。

3)建表语句

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

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

参数

默认值

说明

orc.compress

ZLIB

压缩格式,可选项:NONEZLIB,SNAPPY

orc.compress.size

262,144

每个压缩块的大小(ORC文件是分块压缩的)

orc.stripe.size

67,108,864

每个stripe的大小

orc.row.index.stride

10,000

索引步长(每隔多少行数据建一条索引)

 Parquet

Parquet文件是Hadoop生态中的一个通用的文件格式,它也是一个列式存储的文件格式。

上图展示了一个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位置等信息。

3)建表语句

Create table parquet_table(column_specs)stored as parquettblproperties (property_name=property_value, ...);

支持的参数如下:

参数

默认值

说明

parquet.compression

uncompressed

压缩格式,可选项:uncompressedsnappygziplzobrotlilz4

parquet.block.size

134217728 

行组大小,通常与HDFS块大小保持一致

parquet.page.size

1048576

页大小


http://www.ppmy.cn/news/1150096.html

相关文章

基于spring boot的多维分类的知识管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 用户管理 知识分类管理 知识信息管理 知识信息添加 用户功能实现 首页 知识信息 个人中心 我的收藏 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着国内市场经济这几十年来的蓬勃发展&…

LuaRadio介绍

介绍 LuaRadio是一个用于构建信号处理流程图的框架 在软件定义的无线电流图中,源和接收块倾向于实现某种I/O,如从SDR加密狗读取样本,或将样本写入IQ文件,而处理块倾向于计算,如滤波器和乘法器。 数据类型说明 LuaRadio…

【知网检索征稿】第三届社会发展与媒体传播国际学术会议(SDMC 2023)

第三届社会发展与媒体传播国际学术会议(SDMC 2023) 2023 3rd International Conference on Social Development and Media Communication 第三届社会发展与媒体传播国际学术会议 (SDMC 2023)将于2023年11月03-05日在中国杭州召开。会议主题主要围绕社会…

vscode 资源管理器移动到右边

目录 vscode 资源管理器移动到右边 vscode 资源管理器移动到右边 点击 文件》首选项》设置》工作台》外观》 找到这个配置下拉选择左右

如何开发一款跑酷游戏?

跑酷游戏(Parkour Game)是一种流行的视频游戏类型,玩家需要在游戏中控制角色进行极限动作、跳跃、爬墙和各种动作,以完成各种挑战和任务。如果你有兴趣开发一款跑酷游戏,以下是一些关键步骤和考虑事项: 游…

iMazing2023免费版苹果iPhone手机备份应用软件

iMazing是一款功能强大的苹果手机备份软件,它可通过备份功能将通讯录备份到电脑上,并在电脑端iMazing“通讯录”功能中随时查看和导出联系人信息。它自带Wi-Fi自动备份功能,能够保证通讯录备份数据是一直在动态更新的,防止手机中新…

git push rejected的原因

"git push rejected" 是 Git 中一个常见的错误消息,表示你尝试将本地的更改推送到远程仓库时,远程仓库拒绝了你的推送请求。这通常有几个可能的原因,下面是一些常见的情况和解决方法: 权限问题:你可能没有足…

js的运算符

文章目录 一、算术运算符二、逻辑运算符三、比较运算符四、赋值运算符五、三目运算符六、展开运算符 一、算术运算符 加: 字符串的拼接也是该符号,若需要两个字符串的数字相加,需要转成整数或小数:parseInt、parseFloat 减&#…