1. 程式人生 > 其它 >第三章_Hive 資料型別

第三章_Hive 資料型別

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