Hive中的存储

存储格式

默认textfile的使用:

hive>create table t1(id int, name string) stored as textfile;
hive>create table t1(id int, name string);

默认存储的时候,使用的格式是textfile,上述两句语句的效果一样。

hive>desc formatted t1;
    默认为textfile格式时候的格式:
	InputFormat:            org.apache.hadoop.mapred.TextInputFormat 
	OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
	Compressed:             No
hive>create table t2(id int, name string) stored as
	 inputformat 'org.apache.hadoop.mapred.TextInputFormat'         
	 outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 

产生的结果与textfile相同

**注意:**inputformat与outputformat可以自己进行自定义

发展历程:

| TEXTFILE – (Default, depending on hive.default.fileformat configuration)
| RCFILE – (Note: Available in Hive 0.6.0 and later)
| ORC – (Note: Available in Hive 0.11.0 and later)
| PARQUET – (Note: Available in Hive 0.13.0 and later)
| AVRO – (Note: Available in Hive 0.14.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

**建议:**ORC与PARQUET足够了


行式存储 VS 列式存储

行式存储

在这里插入图片描述

如上图所示,行式存储的结构:
假设文件中有ABCD 4列,5行数据

  • 对应HDFS里就是Block
  • 那么在Block里面是什么样的结构呢?

在这里插入图片描述

  • 行式存储带来的优点:

对于每一行数据的每一列,必然是在同一个Block里面的

  • 行式存储带来的缺点:

因为一行记录有很多列,每一列的数据类型可能会是不一样的

如果每一列的数据类型都不一样,那么在压缩的时候,会带来麻烦
每种类型的压缩比都不一样,无法达到每种类型数据压缩比达到最好的效果
select a,b from xxx;
对于行式存储,是需要将所有的列都给读取出来的
也就是说c和d我们虽然用不上,但是它也会去读,这样会造成IO的提升

列式存储

在这里插入图片描述

如上图所示,列式存储的结构:

把每一行中的列给拆开了,存放在不同的Block里面了
列式存储不能保证同一行记录的所有列在同一个Block里面的
AB两列存在1个Block里
C列存在1个Block里
D列存在1个Block里

  • 这样会带来一个很好的优势
    既然是同一列的数据存在同一个Block里面,那么数据类型必然是一样的,就可以采用压缩比更高的方式进行压缩
  • select c from xxx;
    只需要拿走1个Block里面的数据就可以了,不用去碰其余两个Block里的数据
    IO大幅度的减少
  • 带来一个缺点:
    查询的东西一多,要读取的Block多
    ===>
    如果我们使用select * from xxx; 行式和列式可能没有多大的区别
    如果我们查的是某些字段,那么列式的优势就体现出来了
    在我们的大数据场景来说:
  • 可能我们有几百列,但是我们所查询的就几列
    这种场景下,使用列式存储更好

TextFile

默认的存储格式
普通文件/json/xml ==> 使用TextFile进行存储

**注意:**使用TextFile进行存储,很多都是当作字符串来进行处理的

SequenceFile

在这里插入图片描述

如上图所示,Record是真正存放数据的,有3种级别:

  • No compression的Record:
    RecordLengt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值