hive數據類型
原子數據類型(9種)
- Hive 支持日期類型(老版本不支持),在 Hive 裏日期一般都是用字符串來表示的,而常用的日期格式轉化操作則是通過自定義函數進行操作,當然也可以直接指定爲日期類型
- Hive 是用 Java 開發的,Hive 裏的基本數據類型和 java 的基本數據類型也是一一對應的,除了 String 類型。
- 有符號的整數類型:TINYINT、SMALLINT、INT 和 BIGINT 分別等價於 Java 的 Byte、Short、Int 和 Long 原子類型,它們分別爲 1 字節、2 字節、4 字節和 8 字節有符號整數。
- Hive 的浮點數據類型 FLOAT 和 DOUBLE,對應於 Java 的基本類型 Float 和 Double 類型。
- Hive 的 BOOLEAN 類型相當於 Java 的基本數據類型 Boolean。
- Hive 的 String 類型相當於數據庫的 Varchar 類型,該類型是一個可變的字符串,不過它不能聲明其中最多能存儲多少個字符,理論上它可以存儲 2GB 的字符數。
複雜數據類型
複雜數據類型都是有原子數據類型構成的
複雜數據類型包括數組(ARRAY)、映射(MAP)和結構體(STRUCT),具體如下所示:
示例:
CREATE TABLE student(
name STRING,
favors ARRAY<STRING>,
scores MAP<STRING, FLOAT>,
address STRUCT<province:STRING, city:STRING, detail:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ';'
MAP KEYS TERMINATED BY ':' ;
說明:
- 字段 name 是基本類型,favors 是數組類型,可以保存很多愛好,scores 是映射類型,可以保存多個課程的成績,address 是結構類型,可以存儲住址信息
- ROW FORMAT DELIMITED 是指明後面的關鍵詞是列和元素分隔符的
- FIELDS TERMINATED BY 是字段分隔符
- COLLECTION ITEMS TERMINATED BY 是元素分隔符(Array 中的各元素、Struct 中的各元素、Map 中的 key-value 對之間)
- MAP KEYS TERMINATED BY 是 Map 中 key 與 value 的分隔符
- LINES TERMINATED BY 是行之間的分隔符
- STORED AS TEXTFILE 指數據文件上傳之後保存的格式
總結: 在關係型數據庫中,我們至少需要三張表來定義,包括學生基本表、愛好表、成績表;
但在 Hive 中通過一張表就可以搞定了。也就是說,複合數據類型把多表關係通過一張表就
可以實現了。
1. array
建表語句:
create table person(name string,work_locations string)
row format delimited fields terminated by '\t';
create table person1(name string,work_locations array<string>)
row format delimited fields terminated by '\t'
collection items terminated by ',';
數據:
huangbo beijing,shanghai,tianjin,hangzhou
xuzheng changchu,chengdu,wuhan
wangbaoqiang dalian,shenyang,jilin
導入數據:
load data local inpath '/home/hadoop/person.txt' into table person;
查詢語句:
Select * from person;
Select name from person;
Select work_locations from person;
Select work_locations[0] from person;
2. map
建表語句:
create table score(name string, scores map<string,int>)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':';
數據:
huangbo yuwen:80,shuxue:89,yingyu:95
xuzheng yuwen:70,shuxue:65,yingyu:81
wangbaoqiang yuwen:75,shuxue:100,yingyu:75
導入數據:
load data local inpath '/home/hadoop/score.txt' into table score;
查詢語句:
Select * from score;
Select name from score;
Select scores from score;
Select s.scores['yuwen'] from score s;
3. struct
建表語句:
create table structtable(id int,course struct<name:string,score:int>)
row format delimited fields terminated by '\t'
collection items terminated by ',';
數據:
1 english,80
2 math,89
3 chinese,95
導入數據:
load data local inpath '/ home/hadoop / structtable.txt' into table structtable;
查詢語句:
Select * from structtable;
Select id from structtable;
Select course from structtable;
Select t.course.name from structtable t;
Select t.course.score from structtable t;
4. uniontype
略