HIVE数据类型
毕竟HIVE穿着SQL的外壳,肯定支持诸如Mysql这种RDBMS的数据类型,如int,varchar,但是它还具有非常多自有的数据类型,包括复杂的数据类型(数组,Map等)也是支持的!
数字类型,日期类型,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中的数据
查询数组中指定索引
Map类型
hive (hive)> create table maptest(id int,score map)
> row format delimited fields terminated by','
> map keys terminated by':';
查询HIVE中的数据
查询指定的key
Struct类型
与数组区别是可以不同的数据类型,上例数组都是String类型的,这里既有String又有Int。
hive (hive)> create table structtest(id int,info struct)
> row format delimited fields terminated by','
> collection items terminated by':';
查询HIVE中的数据
HIVE的数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile等)。
CREATE TABLE ... STORED AS Text File(defalut)|SequenceFile|RCFile|Avro Files|ORC Files|Parquet
Parquet和ORC是属于列式存储。
具体参考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