Hive学习笔记(二)—Hive数据类型和存储格式

Hive 支持关系型数据中大多数基本数据类型,除了额外的三个复杂的数据类型。

一、数据类型

array

类比java中的array 有序的的同类型的集合

create table test(
    id int,
    name string,
    hobby array<string>
)
row format delimited
fields terminated by '\t'
collection items terminated by ','; 

array的默认分割是\002,在shell中如何敲出来ctrl+v ctrl+b,这里使用的是逗号分隔

在导入数据时,数据的格式应该如下:

1 张三 read,run

array的引用,使用arrayName[index],索引从0开始

map

类比java中的map key-value,key必须为原始类型,value可以任意类型

create table test(
    id int,
    name string,
    score map<string, float> comment "this is score"
) row format delimited 
fields terminated by '\t'
collection items terminated by ','
map keys terminated by '=';

根据上面的定义,导入的数据格式应该如下:

1 张三 Chinese=102,Math=121,English=124

map里面的默认的key和value之间的分隔符:\003,在shell里面通过ctrl+v ctrl+c
map具体值的调用格式,列名[“属性”],比如score[“math”]

struct

类比java中的object 字段集合,类型可以不同

create table t5_struct (
    id int,
    name string,
    address struct<province:string, city:string, zip:int>
) row format delimited 
fields terminated by '\t'
collection items terminated by ',';

根据上面的定义,导入的数据格式应该如下:

id name address(province:string, city:string, zip:int)
1 小陈 bj,chaoyang,100002
2 老王 hb,shijiazhuang,052260
3 小何 hn,huaiyang,466000
4 小马 hlj,harbin,10000

调用的格式:列名.属性,比如address.province

二、存储格式

textfile

textfile为默认格式,存储方式为行存储。数据不做压缩,磁盘开销大,数据解析开销大

SequenceFile

SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点
SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。

RCFile

一种行列存储相结合的存储方式

ORCFile

数据按照行分块,每个块按照列存储,其中每个块都存储有一个索引。hive给出的新格式,属于RCFILE的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快 快速列存取。

Parquet

Parquet也是一种行式存储,同时具有很好的压缩性能;同时可以减少大量的表扫描和反序列化的时间

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章