第三章_Hive 資料型別
阿新 • • 發佈:2022-02-13
1. 基本型別
tinyint
smalint
int
bigint
boolean
float
double
decimal
string : 相當於varchar,可變字串,不用指定長度,理論上可以儲存2GB字元數
timestamp
binary
2. 集合資料型別
struct
map
array
案例1 : array 型別
-- array型別 案例
create table arraytab
(
name string,
friends array <string>
)
row format delimited fields terminated by '#' -- 列分隔符
collection items terminated by ',' -- 集合(array、struct、map) 元素分隔符
lines terminated by '\n' -- 行分割符
;
-- 資料
劉備#關羽,張飛,馬超,諸葛亮,黃忠,趙雲
曹操#許褚,荀彧,司馬懿
-- 從本地匯入資料到hive
load data local inpath '/root/sanguo.txt' overwrite into table home.arraytab;
-- 查詢資料
select name
, friends[0]
, friends[1]
, friends[2]
, friends[3]
, friends[4]
, friends[5]
from home.arraytab;
-- 結果
name _c1 _c2 _c3 _c4 _c5 _c6
劉備1 關羽 張飛 馬超 諸葛亮 黃忠 趙雲
曹操1 許褚 荀彧 司馬懿 NULL NULL NULL
View Code
案例2 : struct 型別
-- struct 型別
create table structtab
(
name string,
friend struct<name:string, age:int, address:string>
)
row format delimited fields terminated by '#' -- 列分隔符
collection items terminated by ',' -- 集合(array、struct、map) 元素分隔符
lines terminated by '\n' -- 行分割符
;
-- 資料
劉備#關羽,120,山西
曹操#許褚,20
孫權#呂蒙,30,杭州,100
-- 從本地匯入資料到hive
load data local inpath '/root/sanguo1.txt' overwrite into table home.structtab;
-- 查詢資料
select name
, friend
, friend.name
, friend.age
, friend.address
from home.structtab;
-- 結果
name friend name age address
劉備 {"name":"關羽","age":120,"address":"山西"} 關羽 120 山西
曹操 {"name":"許褚","age":20,"address":null} 許褚 20 NULL
孫權 {"name":"呂蒙","age":30,"address":"杭州"} 呂蒙 30 杭州
View Code
案例3 : map 型別
--案例3 : map 型別
create table maptab
(
name string,
friend map<string, int>
)
row format delimited fields terminated by '#' -- 列分隔符
collection items terminated by ',' -- 集合(array、struct、map 元素分隔符)
map keys terminated by ':' -- map 的 key、value 分隔符
lines terminated by '\n' -- 行分割符
;
-- 資料
劉備#關羽:120,張飛:20
曹操#許褚:20
孫權#呂蒙:30:杭州:100
-- 從本地匯入資料到hive
load data local inpath '/root/sanguo2.txt' overwrite into table home.maptab;
-- 查詢資料
select name
,friend
,friend['關羽']
,friend['山西']
from home.maptab;
-- 結果
name friend _c2 _c3
劉備 {"關羽":120,"山西":null} 120 NULL
曹操 {"許褚":20} NULL NULL
孫權 {"呂蒙":null} NULL NULL
View Code
3. 型別轉換
1. 隱式型別轉換(自動型別轉換) 規則
1. 小型別 自動轉向 大型別
tinyint 轉 int
int 轉 bigint
2. 所有的 整數型別、float、string 都可以自動轉換 double型別
3. tinyint、smallint、int都 可以自動轉換成 float
4. boolean 不可以轉換成 其他任何型別
2. 強制型別轉換
1. cast('10' as int)
如果強制型別轉換失敗,將返回null