【Hive】hive表的文件存储格式
在Hive中,文件的存储格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。
其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储。
1. 行存储和列存储
上图中左边为逻辑表,右上为行存储,右下为列存储。
当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。
在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。
2. TEXTFILE
TEXTFILE是Hive的默认存储格式,数据不做压缩,磁盘开销大。实际生产中很少用TEXTFILE存储。
3. ORC
ORC(Optimized Row Columnar)从Hive0.11.0开始出现,提高了Hive在写入、读取、计算数据时的性能。ORC文件默认使用ZLIB压缩。
ORC文件由stripe、file footer、postscript三部分组成:
3.1 Stripe
一个ORC文件,可以包含多个Stripe,Stripe默认大小250M。
Stripe由Index Data、Row Data、Stripe Footer三部分组成。
(1)Index Data
轻量级索引,默认每隔1w行做一个索引,目的是记录某行的各个字段在Row Data中的偏移量。
(2)Row Data
真正存储数据的部分,对每个列进行编码存储。
(3)Stripe Footer
存储stripe的元数据信息。
3.2 File Footer
每个ORC文件中存有一个file footer,里面记录了各个stripe存储的行数,每个列的数据类型等信息。
3.3 Postscript
Postscript在ORC文件的尾部,记录了整个文件的压缩类型、File Footer的长度信息等。ORC文件是从后往前读的,先读取Postscript,获取File Footer的信息,再从File Footer里读取Stripe的信息,最后定位到需要读取的数据。
Hive中可以采用如下三种方式使数据存储到ORC文件中:
(1) CREATE TABLE ... STORED AS ORC
(2) ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC
(3) SET hive.default.fileformat=Orc
Hive 0.14.0版本后还可以使用CONCATENATE命令合并ORC文件:
ALTER TABLE table_name [PARTITION partition_spec] CONCATENATE
4. PARQUET
Parquet是面向分析型系统的列式存储格式,由Twitter和Cloudera合作开发,2015年5月成为Apache的顶级项目。
Parquet文件是以二进制格式存储的,所以不能直接读取。
通常情况下,Parquet文件在存储时会按照Block大小设置行组(Row Group)的大小,这样Parquet文件就可以被多个mapper处理,增加了任务的并行度。
Parquet文件格式如下图所示:
一个Parquet文件中可以存储多个行组,文件的首位都是该文件的Magic Number,用于校验它是否是一个Parquet文件。
Footer length记录了文件元数据的大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行组的元数据信息和该文件存储数据的Schema信息。
除了文件中每一个行组的元数据,每一页的开始都会存储该页的元数据,在Parquet中,有三种类型的页:数据页、字典页和索引页。
数据页:用于存储当前行组中该列的值;
字典页:存储该列值的编码字典,每一个列块中最多包含一个字典页;
索引页:用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。
由于Parquet在Hive 0.10 - 0.12中以插件形式存在,Hive 0.13及以后版本才得以集成,所以建表语句有所不同。
Hive 0.10 - 0.12:
CREATE TABLE parquet_test (id int,str string,mp MAP<STRING,STRING>,lst ARRAY<STRING>,strct STRUCT<A:STRING,B:STRING>)
PARTITIONED BY (part string)
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe'STORED ASINPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat';
Hive 0.13+:
CREATE TABLE parquet_test (id int,str string,mp MAP<STRING,STRING>,lst ARRAY<STRING>,strct STRUCT<A:STRING,B:STRING>)
PARTITIONED BY (part string)
STORED AS PARQUET;
总结
Hive支持的文件格式主要有:行存储(TEXTFILE、SEQUENCEFILE) 和列存储(ORC、PARQUET);
在实际生产环境,使用ORC和PARQUET的情况比较多;
【Hive】hive表的文件存储格式相关推荐
- hive的四种文件存储格式
hive分为四种存储格式: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 在其中textfile为默认格式,如果在创建hive表不提及,会默认启动textf ...
- 大数据:Hive - ORC 文件存储格式
一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...
- Hive - ORC 文件存储格式详细解析
一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...
- (转载)hive文件存储格式
对于hive格式的认识,先转载后实践再加深认识. 转载地址:http://blog.csdn.net/yfkiss/article/details/7787742 hive在建表是,可以通过'STOR ...
- Hive文件存储格式和hive数据压缩
一.存储格式行存储和列存储 二.Hive文件存储格式 三.创建语句和压缩 一.存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据. 列存储,以字段聚集存储,可以理解为 ...
- linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比
orc文件存储格式 ORC文件也是以二进制方式列式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的.文件结构如下 ORC文 ...
- 【Hive】建表时的存储格式
目录 一.简介 1.hive建表时存储格式 2.五种存储格式的区别 二.实践操作 1.textfile 2.sequencefile 3.rcfile 4.orc 5.parquet 三.适用场景 一 ...
- hive读取hdfs存放文件_Hive基本概念
1.1 Hive简介 1.1.1 什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.1.2 为什么使用Hive 直接 ...
- hive 导出json格式 文件_Hive 系列 之 基本操作合集
下面是本课程概览: (1)hive系列之简介,安装,beeline和hiveserver2 (2)hive系列之基本操作 (3)hive系列之udf (4)hive系列之二级分区和动态分区 (5)hi ...
最新文章
- Ubuntu 划词翻译
- 中国高校人工智能学院院长 【截止到 2019-05-07】
- Rust 交叉编译设置
- __builtin__与__builtins__的区别与关系
- C# xml通过xslt转换为html输出
- Python打包PyPI上传实践
- CSDN博客导出备份工具
- Lodash常用用法总结
- 采样频率和带宽的关系_基于矢量网络分析仪的 TDR 与传统采样示波器 TDR 之间的测量性能和优势比较...
- java 应用是单机集群_【架构】Tomcat单机部署多应用Windows
- sql去重、or、in、and、groupby的使用
- jvm学习笔记(4)——jvm配置调优
- 人生规划:20岁到60岁我该干什么
- MSSQL调优实战一 乱建聚集索引的后果
- 20172331 《Java程序设计》第3周学习总结
- init()函数何时运行?
- 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
- Mac 此账户尚未用于app store_App Store调整频繁!游戏App下架数量再次增加! | 8月推广报告...
- contest18 CF788 div1 ooxxx oooox oooox
- 汇总:web前端优化网页加载速度
热门文章
- numpy 转置_Python中Numpy.transpose()
- mfc combobox dropdown中编辑框不可输入的属性设置_实践 | 一文知晓MES系统中的批次管控功能...
- 用c语言编声光报警子程序,C语言编程的智能火灾报警监测系统
- coreldraw水涟漪怎么做_不懂怎么挑选水处理设备?跟贝斯沃了解这3点再做决定,轻松挑出适合自己的...
- 必须要会的Linux命令,省时省力
- 【阿圆总结】关于平时阅读的推荐
- 一个迷失了本性的聊天软件,初衷不在,何其悲伤
- Ext3.0中复杂表头样例
- Qt 遍历目录下所有图片
- app 之间发送文件 ios