【Hive】hive數據類型

hive數據類型

原子數據類型(9種)

在這裏插入圖片描述

  1. Hive 支持日期類型(老版本不支持),在 Hive 裏日期一般都是用字符串來表示的,而常用的日期格式轉化操作則是通過自定義函數進行操作,當然也可以直接指定爲日期類型
  2. Hive 是用 Java 開發的,Hive 裏的基本數據類型和 java 的基本數據類型也是一一對應的,除了 String 類型。
  3. 有符號的整數類型:TINYINT、SMALLINT、INT 和 BIGINT 分別等價於 Java 的 Byte、Short、Int 和 Long 原子類型,它們分別爲 1 字節、2 字節、4 字節和 8 字節有符號整數。
  4. Hive 的浮點數據類型 FLOAT 和 DOUBLE,對應於 Java 的基本類型 Float 和 Double 類型。
  5. Hive 的 BOOLEAN 類型相當於 Java 的基本數據類型 Boolean。
  6. 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 ':' ;

說明:

  1. 字段 name 是基本類型,favors 是數組類型,可以保存很多愛好,scores 是映射類型,可以保存多個課程的成績,address 是結構類型,可以存儲住址信息
  2. ROW FORMAT DELIMITED 是指明後面的關鍵詞是列和元素分隔符的
  3. FIELDS TERMINATED BY 是字段分隔符
  4. COLLECTION ITEMS TERMINATED BY 是元素分隔符(Array 中的各元素、Struct 中的各元素、Map 中的 key-value 對之間)
  5. MAP KEYS TERMINATED BY 是 Map 中 key 與 value 的分隔符
  6. LINES TERMINATED BY 是行之間的分隔符
  7. 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

發佈了84 篇原創文章 · 獲贊 12 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章