一、综述

1.建表规范

我们知道hive建表的完成格式如下:

 CREATE [EXTERNAL] TABLE [IF NOT EXISTS]     table_name      [(col_name   data_type   [COMMENT col_comment], ...)]        [COMMENT   table_comment]                                    [PARTITIONED BY(col_name data_type [COMMENT col_comment], ...)][CLUSTERED BY (col_name, col_name, ...)[SORTED BY(col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS][ROW FORMAT row_format] [STORED AS file_format][LOCATION hdfs_path]

其中的可选参数中STORED AS就是表中的存储格式,例如如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

2.文件存储格式

hive文件存储格式包括以下几类:

(1)、TEXTFILE
(2)、SEQUENCEFILE
(3)、RCFILE
(4)、ORCFILE(0.11以后出现)
(5)、PARQUET

说明:
其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理; SEQUENCEFILE,RCFILE,ORCFILE,PARQUET格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile,PARQUET各自表中;或者用复制表结构及数据的方式(create table as select * from table )。
一言以蔽之:如果为textfile的文件格式,直接load就OK,不需要走MapReduce;如果是其他的类型就需要走MapReduce了,因为其他的类型都涉及到了文件的压缩,这需要借助MapReduce的压缩方式来实现。

二、简介

1、textfile

默认格式;

存储方式为行存储;

磁盘开销大 数据解析开销大;

使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

2、sequencefile

二进制文件,以<key,value>的形式序列化到文件中;
存储方式:行存储;
可分割 压缩;
一般选择block压缩;
优势是文件和Hadoop api中的mapfile是相互兼容的

3、refile

存储方式:数据按行分块,每块按照列存储;
压缩快 快速列存取;
读记录尽量涉及到的block最少;
读取需要的列只需要读取每个row group 的头部定义;
读取全量数据的操作 性能可能比sequencefile没有明显的优势,

4、orcfile

存储方式:数据按行分块,每块按照列存储;

压缩快 快速列存取;

效率比rcfile高,是rcfile的改良版本。

5、parquet

类似于orc,相对于orc文件格式,hadoop生态系统中大部分工程都支持parquet文件。

三、主流方式对比(TEXTFILE 、ORC、PARQUET三者的对比)

所谓的存储格式就是在Hive建表的时候指定的将表中的数据按照什么样子的存储方式,如果指定了A方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型。例如TEXTFILE 、SEQUENCEFILE、ORC、PARQUET这四种存储,前面两种是行式存储,后面两种是列式存储。
如果为textfile的文件格式,直接load就OK,不需要走MapReduce;如果是其他的类型就需要走MapReduce了,因为其他的类型都涉及到了文件的压缩,这需要借助MapReduce的压缩方式来实现。
总结对比:

比对三种主流的文件存储格式TEXTFILE 、ORC、PARQUET
压缩比:ORC > Parquet > textFile(textfile没有进行压缩)
查询速度:三者几乎一致
HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名

四、使用案例(建表)

1、textfile,

-- 创建表,存储数据格式为TEXTFILE
create table log_text (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
) row format delimited fields terminated by '\t'
stored as textfile ; --向表中加载数据
load data local inpath '/opt/module/datas/log.data' into table log_text ;--查看表中数据大小
--这个过程不会走MapReduce,而是直接将文件上传到了HDFS,在HDFS上文件的名字还叫log.data
dfs -du -h /user/hive/warehouse/db_hive.db/log_text;
18.1 M  /user/hive/warehouse/db_hive.db/log_text/log.data

2、ORC

--创建表,存储数据格式为ORC
create table log_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
) row format delimited fields terminated by '\t'
stored as orc ;--向表中加载数据
insert into table log_orc select * from log_text ;--查看表中数据大小
--这个过程要走MapReduce,而且文件是按照列式存储的,还会对文件进行压缩,
--Orc默认使用的压缩方式是zlib因此会更加节省空间,hadfs上是新的文件名,hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc;
2.8 M  /user/hive/warehouse/db_hive.db/log_orc/000000_0

3、Parquet

-- 创建表,存储数据格式为parquet
create table log_parquet(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
) row format delimited fields terminated by '\t'
stored as parquet ; -- 向表中加载数据
insert into table log_parquet select * from log_text ;--查看表中数据大小这个过程要走MapReduce,而且文件是按照列式存储的,因此会更加节省空间,
--hadfs上是新的文件名,
hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_parquet;
13.1 M  /user/hive/warehouse/db_hive.db/log_parquet/000000_0

存储文件的压缩比总结:
ORC > Parquet > textFile


select count(*) from log_text;
select count(*) from log_orc;
select count(*) from log_parquet;

存储文件的查询速度总结:查询速度相近。

五、使用案例(压缩和存储的结合)

在建表的时候,如果我们指定了列式存储的方式,他会默认使用对于的压缩方式将我们的数据进行压缩,与此同时我们能够自己定制在文件存储的时候使用什么样子的压缩方式,例子如下:
以ORC存储格式为例

1.创建一个非压缩的的ORC存储方式

-- 建表
create table log_orc_none(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc tblproperties ("orc.compress"="NONE");
--插入数据
hive (default)> insert into table log_orc_none select * from log_text ;

2.创建一个SNAPPY压缩的ORC存储方式

– 建表

create table log_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc tblproperties ("orc.compress"="SNAPPY");
-- 插入数据
hive (default)> insert into table log_orc_snappy select * from log_text ;

3.创建一个默认压缩的ORC存储方式

-- 建表
create table log_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc ;-- 向表中加载数据
insert into table log_orc select * from log_text ;

对比三者的压缩比:

hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_none;
18.1 M  /user/hive/warehouse/db_hive.db/log_orc_none/log.datahive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_snappy;
3.8 M  /user/hive/warehouse/db_hive.db/log_orc_snappy/000000_0hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc;
2.8 M  /user/hive/warehouse/db_hive.db/log_orc/000000_0

总结:

没有压缩的orc格式相当于textfile,默认的压缩格式压缩比最大,snappy对数据进行了压缩
orc存储文件默认采用ZLIB压缩,ZLIB采用的是deflate压缩算法。因此比snappy压缩的小。
文件没有压缩的话,HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名

Hive文件存储格式(建表stored as 的五种类型)相关推荐

  1. (转载)hive文件存储格式

    对于hive格式的认识,先转载后实践再加深认识. 转载地址:http://blog.csdn.net/yfkiss/article/details/7787742 hive在建表是,可以通过'STOR ...

  2. Hive文件存储格式和hive数据压缩

    一.存储格式行存储和列存储 二.Hive文件存储格式 三.创建语句和压缩 一.存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据. 列存储,以字段聚集存储,可以理解为 ...

  3. 利用python编写exe应用,实现excel文件输出建表sql文件。

    目录 一.excel文件内容如下: 二.生成如下sql: 三. 思路: 1.设计界面 2.界面分模块设计 2.1 模块一(数据库选择) 点击选择按钮会触发command后面的函数,同时会相应的返回va ...

  4. hive常见的建表方式有哪些?各自的使用场景是?

    hive常见的建表方式有哪些?各自的使用场景是? hive常见的建表方式与应用场景 hive常见的建表方式与应用场景 1.直接建表法 create table tableName(字段名称 字段类型 ...

  5. linux下的文件可以分为哪五种类型,LINUX系统文件类型分类

    使用LINUX过程中,时常会对文件进行操作.但是linux中文件究竟有哪些分类呢?今天让我们大家来总结一下吧! 概述: linux文件可以分为五种类型,分别为:普通文件.目录.字符设备或块设备.套接口 ...

  6. linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比

    orc文件存储格式 ORC文件也是以二进制方式列式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的.文件结构如下 ORC文 ...

  7. DataGrip csv等文件 快速建表

    -- 文件快速导入 快捷建表 效果 // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`-- ...

  8. vba九九乘法表代码_用五种方法利用EXCEL制作九九乘法表

    昨天因贪玩了一下,一天都和同事在外面玩,计划就是这一天让自己啥也不做,一天玩下来,觉得好累,原来玩也是很累的.既然在外面放松了一天了,今天就把昨天的九九乘法表的制作方法给补上来.事实上九九乘法表的制作 ...

  9. Hive文件数创建过多的问题

    一 Hive的创建文件数的限制 Hive对文件创建的总数是有限制的,这个限制取决于参数: hive.exec.max.created.files,默认值是10000.如果现在你的表有60个分区,然后你 ...

  10. Dbml文件提取建表TSql-CodeSmith

    在昨天一个大学师弟,他问我能不能将LinqToSql文件转化为创建表的TSql语句,他是刚开始学习.NET,所以在网上下些示例看,但苦于没有数据库.所以就有了这一篇博客,作为我的Code生成技术的Co ...

最新文章

  1. 波士顿动力的机器人会开门了,中国还要奋力追赶
  2. tf.name_scope() 和 tf.variable_scope() 的用法和玄机
  3. 数据库连接串MSSQL、Oracle、Access
  4. html:(20):使用下拉框进行多选和使用提交按钮提交
  5. zillow房价预测比赛_Kaggle竞赛 —— 房价预测 (House Prices)
  6. 【bzoj3122】 Sdoi2013—随机数生成器
  7. ktv点歌系统安卓_喜事汇KTV设备更新语音点歌系统,特推出一下优惠活动。转发朋友圈有惊喜。...
  8. JS获取键盘码并判断按键
  9. 电脑中了MEMZ病毒怎么办
  10. Android之USB打印
  11. 51单片机|keilc51|模块函数|延时函数、独立键盘函数
  12. Visio画拓扑图随记
  13. OpenGl L13深度测试
  14. 游戏排行榜实现mysql_游戏中百万用户排行设计与实现
  15. 【编程实践】一致性哈希(hash)算法实现
  16. Charles抓包工具使用介绍
  17. 论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description
  18. 使用Java8中的Optional类来消除代码中的null检查
  19. mov 与 lea 区别
  20. 计算机应用技术专业介绍英文,计算机技术与应用专业英文简历模板

热门文章

  1. 用Xbrowser连接CentOS
  2. CE-RTI开源软件代码学习笔记(一)
  3. html语言单词背不下来,英语单词怎么都背不下来怎么办
  4. java 微信公众号发红包_【微信支付】现金红包开发者文档
  5. 时间(格林尼治时间/协调世界时/世界时间)
  6. 文献翻译:《Basel Face Model 2009》(一种用于姿态和光照不变人脸识别的三维人脸模型,3DMM,BFM2009)
  7. 电赛无人机特征匹配(二):ORB算法+BFM算法+D-P轮廓检测算法
  8. 更改Ubuntu 18.04的时区
  9. [ur_driver-2] process has died
  10. zip_longest