hive 修改表的存储格式_【Hive教程】(二)Hive数据类型和存储格式

这篇博客详细介绍了Hive的数据类型,包括常见的数字、日期、字符串和布尔类型,以及Hive特有的复杂数据类型如Array、Map和Struct。此外,文章还探讨了Hive的数据存储,提到了TextFile、SequenceFile、RCFile、Avro、ORC和Parquet等不同存储格式,并通过测试比较了它们的磁盘空间占用。最后,文章简要概述了Hive的数据模型,包括DB、Table、External Table、Partition和Bucket。
摘要由CSDN通过智能技术生成

HIVE数据类型

毕竟HIVE穿着SQL的外壳,肯定支持诸如Mysql这种RDBMS的数据类型,如int,varchar,但是它还具有非常多自有的数据类型,包括复杂的数据类型(数组,Map等)也是支持的!

ef9db77b2a25e6b9740f4793720b1ac6.png

数字类型,日期类型,String类型,Boolean类型我们都是比较熟悉的,也比较简单,就不讲解了。演示一下复杂数据类型:

Array类型

hive (hive)> create table arraytest (id int,course array)

> row format delimited fields terminated by','

> collection items terminated by':';

row format delimited fields terminated by是指定列与列之间的分隔符,此处为”,”

collection items terminated by是指定集合内元素之间的分隔符,此处为”:”

因此我们要导入到hive中的数据应该是形如:

1,math:chinese

2,english:history

查询HIVE中的数据

ef9db77b2a25e6b9740f4793720b1ac6.png

查询数组中指定索引

ef9db77b2a25e6b9740f4793720b1ac6.png

Map类型

hive (hive)> create table maptest(id int,score map)

> row format delimited fields terminated by','

> map keys terminated by':';

查询HIVE中的数据

ef9db77b2a25e6b9740f4793720b1ac6.png

查询指定的key

ef9db77b2a25e6b9740f4793720b1ac6.png

Struct类型

与数组区别是可以不同的数据类型,上例数组都是String类型的,这里既有String又有Int。

hive (hive)> create table structtest(id int,info struct)

> row format delimited fields terminated by','

> collection items terminated by':';

查询HIVE中的数据

ef9db77b2a25e6b9740f4793720b1ac6.png

HIVE的数据存储

1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile等)。

CREATE TABLE ... STORED AS Text File(defalut)|SequenceFile|RCFile|Avro Files|ORC Files|Parquet

Parquet和ORC是属于列式存储。

ef9db77b2a25e6b9740f4793720b1ac6.png

具体参考Hive/FileFormats

这里聊聊它们的对比,笔者做过一个测试,对同一份数据源利用不同的数据存储之后,查看它们的大小:

TextFile(默认) 文件大小为28.1M

用SequenceFile存储后的文件为29.6M

用RcFile存储后的文件为27.9M

用ORCFile存储后的文件为17.7M

用Parquet存储后的文件为23.1M

总结:磁盘空间占用大小比较

ORCFile

所以可以根据业务需求,选择合适的存储格式。

2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

table:在hdfs中表现所属db目录下一个文件夹

external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径。普通表: 删除表后, hdfs上的文件都删了,External外部表删除后, hdfs上的文件没有删除, 只是把hive的表删除了。

partition 分区:在hdfs中表现为table目录下的子目录

bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中

BDStar原创文章。发布者:Liuyanling,转载请注明出处:http://bigdata-star.com/archives/1013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值