【HIVE】(04)学会理解Hive支持的存储数据格式

系列文章回顾
【HIVE】(01)学会使用JOIN语句
【HIVE】(02)学会理解explain
【HIVE】(03)学会hive中的压缩和解压进行资源优化
【HIVE】(04)学会如何优化hive任务的mapper和reducer个数


文章目录

  • 一.2大类存储方式
  • 二.TextFile格式
  • 三.Orc格式
  • 四.Parquet格式
  • 五.存储和压缩结合


Hive支持的存储数据格式主要有:textfile、sequencefile、orc、parquet。
有使用建议如下:
1)ORC和Parquet是Hive中推荐的存储格式,特别适合大规模数据存储和高性能查询。
2)TextFile和SequenceFile适用于特定场景下的数据存储和处理,但在大规模数据集和性能要求较高的情况下可能不够高效。
本文将介绍不同存储格式的特点。

一.2大类存储方式

有2大类存储方式:行存储、列存储。
1)行存储的特点
查询到满足条件的一行数据时,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中1个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

  • textfile和seqluencefile的存储格式都是基于行存储的;

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

  • orc和parquet的存储格式都是基于列存储的;

二.TextFile格式

默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合gzip、bzip2使用,但使用gzip这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

三.Orc格式

orc文件由1个或多个stripe组成,每个stripe一般为HDFS的块大小,每一个stripe包含多条记录。
这些记录按照列进行独立存储,对应到parquet中的row group的概念。
每个stripe里有3部分组成,分别是index data,row data, stripe footer。
1)index data
一个轻量级的index,默认是每隔1w行做1个索引。
这里的索引应该只是记录某行的各字段在row data中的offset。
2)row data
存的是具体数据,先取部分行,然后对这些行按列进行存储。
对每个列进行编码,分为多个stream来存储。
3)stripe footer
存的是各个stream的类型、长度等信息。
每个文件有1个filede footer,这里面存的是每个stripe的行数,每个column的数据类型信息等。
每个文件的尾部是一个PostScipt,这里面记录了整个文件的压缩类型以及FileFooter 的长度信息等。
在读取文件时,会 seek 到文件尾部读 PostScript,从里面解析到File Footer 长度,再读 FileFooter,从里面解析到各个 Stripe 信息,再读各个 Stripe,即从后往前读。

四.Parquet格式

Parquet 文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的 数据和元数据,因此 Parquet 格式文件是自解析的。
1)行组(Row Group):每一个行组包含一定的行数,在一个 HDFS 文件中至少存储一个行组,类似于 orc 的 stripe 的概念。
2)列块(Column Chunk):在一个行组中每一列保存在一个列块中,行组中的所有列连续的存储在这个行组文件中。一个列块中的值都是相同类型的,不同的列块可能使用不同的算法进行压缩。
3)页(Page):每一个列块划分为多个页,一个页是最小的编码的单位,在同一个列块的不同页可能使用不同的编码方式。

五.存储和压缩结合

格式:在创建表语句后面加上存储、压缩的形式
示例:创建一个 SNAPPY 压缩的 parquet 存储方式

create table test_table(
id string,
value string)
row format delimited fields terminated by '\t'
stored as parquet
tblproperties("parquet.compression"="SNAPPY");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. 部署Node服务 2.1. 前置环境安装 2.2. 将Node服务加…

CMake中,指定源文件不使用预编译头文件,MSVC编译器

在CMake中,如果你想要指定某个特定的.cpp文件不使用预编译头文件(PCH),你可以通过设置该文件的编译属性来实现。以下是一个基础的示例: cmake # 假设你的预编译头文件设置如下 target_precompile_headers(your_target…

jdk8新特性----Lambda表达式

一、介绍 1、简介 Java的Lambda表达式是Java 8引入的一个特性,它支持函数式编程,允许将函数作为方法的参数或返回值,从而简化了匿名内部类的使用,并提供了对并行编程的更好支持。 可以将Lambda表达式理解为一个匿名函数&am…

Kubernetes(k8s)的认证(Authentication)策略解析

Kubernetes(k8s)的认证(Authentication)策略是确保只有经过验证的实体(用户、服务账户等)能够访问API服务器的基础安全措施。Kubernetes支持多种认证方法,以下是主要的认证策略: X50…

【java9】java9新特性概述

经过4次的跳票,历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统,在最初设想的时候并没有想过那么复杂,花费的时间超出预估时间。距离java8大约三年时间。 Java9提供了超过150项新功能特性,包括备受期待的模块…

MySQL基础入门【mysql初识 | 数据库操作 | 表操作 | sql数据类型】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,为什么会有…

【鸿蒙+全国产瑞芯微】智慧楼宇解决方案 | 如何实现多场景下智慧化、精细化楼宇管理?

随着数字化、智能化与工作生活的联结日渐紧密,聚焦人性化服务,以数字和科技匹配多重需求,加速商业楼宇智能化转型的脚步,逐步形成智慧楼宇产品矩阵。 方案亮点 01/数字标牌——形象展示 企业文化宣传、公告通知等 播放内容统一远…

uni-app跨端兼容

1.样式兼容 小程序端不支持*选择器,可以使用(view,text) 页面视口差异(tabar页、普通页) H5端默认开始scoped 例如骨架屏样式出现问题,需要将之前的样式拷贝到骨架屏中 提示:H5端是单页面应用,scoped隔离…

轴承制造企业“数智化”突破口

轴承是当代机械设备中一种重要零部件。它的主要功能是支撑机械旋转体,降低其运动过程中的摩擦系数,并保证其回转精度。轴承是工业核心基础零部件,对国民经济发展和国防建设起着重要的支撑作用。 轴承企业普遍采用以销定产的经营模式&#xf…

【排序算法】之希尔排序

一、算法介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小&#xf…

浮点数的乘法处理

1. 确定符号位; 这个比较好理解,有一个负数,就是负数,否则,就是正数; 2. 解码相加; 这个也比较好激烈,乘法就是指数相加; 3. 尾数相乘; 这里的乘法&…

消息队列——Kafka

1、什么是消息队列,什么是Kafka? 我们通常说的消息队列,简称MQ(Message Queue),它其实就指消息中间件,比较流行的开源消息中间件有:Kafka、RabbitMQ、RocketMQ等。今天我们要介绍的…

qt移植到imx6ull运行(qt部署到imx6ull)

这个事情对于小白来说确实不是很友好,会经常出现错误,我弄了两天终于弄好了 我主要参考了https://blog.csdn.net/m0_61738650/article/details/131269561 https://blog.csdn.net/m0_61738650/article/details/131171914这两个教程 我现在来简述一下流程…

【项目】Boost搜索引擎

项目相关背景 现在市面上已经出现很多搜索引擎,比如:百度、Google、Bing等等,它们都是全网性搜索 而我做得项目就像cplusplus网站中搜索C的相关知识一样,同样做的是站内搜索,它的搜索更垂直。 搜索引擎的宏观原理 ser…

Linux本地部署Nightingale夜莺监控并实现远程访问提高运维效率

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

视频剪辑的技巧:掌握如何高效批量调整视频尺寸的方法

在视频剪辑的过程中,调整视频尺寸是一个常见的需求。无论是为了适应不同平台的播放要求,还是为了统一多个视频的尺寸以提升观看体验,掌握高效批量调整视频尺寸的技巧都显得尤为重要。本文将为您详细介绍云炫AI智剪如何高效地进行这一操作&…

通往糊涂之路 The road to serfdom

最近被推送了一本书,哈耶克的............ 试一试,看看能不能看懂,也许是通往糊涂之路。

记折磨我好几天的一个问题

先交代下背景吧: 我们的系统有很多板子用于跑测试,每一块板子对应一个docker 容器,在容器中跑shell脚本,会调用expect 脚本,在expect脚本中通过screen /dev/ttyUSBx 比特率 连接板子发送命令等,无异常 现…

特殊类的设计与单例模式

1、特殊类的设计 如何设计出一个创建出的对象只能在堆上的类?将类的默认构造函数设置为私有,再将类的拷贝构造函数设置为delete,设置静态函数GetObj,内部调用new HeapOnly,这样就只能在堆上开辟空间。 class HeapOnly…

Windows Qt中支持heic 图片显示

安装vcpkg: git clone https://github.com/microsoft/vcpkg 执行脚本: .\vcpkg\bootstrap-vcpkg.bat 在安装之前如果需要指定vs的编译器, 在如下文件中做更改, 我指定的是用vs2019编译的: D:\vcpkg\vcpkg\triplets 增…