hive數據類型

基本數據類型
Hive數據類型    Java數據類型    長度    例子
TINYINT    byte    1byte有符號整數    5
SMALINT    short    2byte有符號整數    5
INT    int    4byte有符號整數    55
BIGINT        long    8byte有符號整數    5
BOOLEAN    boolean    布爾類型,true或者false    TRUE  FALSE
FLOAT    float    單精度浮點數    3.14159
DOUBLE    double    雙精度浮點數    3.14159
STRING    string    字符系列。可以指定字符集。可以使用單引號或者雙引號    'hello world'
"hello world"
TIMESTAMP         時間類型     
BINARY         字節數組     
對於Hive的String類型相當於數據庫的varchar類型,該類型是一個可變的字符串,不過它不能聲明其中最多能存儲多少個字符,理論上它可以存儲2GB的字符數。

基本數據類型
數據類型

描述    語法示例
STRUCT    和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如,如果某個列的數據類型是STRUCT{first STRING, lastSTRING},那麼第1個元素可以通過字段.first來引用。    struct()
MAP    MAP是一組鍵-值對元組集合,使用數組表示法可以訪問數據。例如,如果某個列的數據類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼可以通過字段名[‘last’]獲取最後一個元素    map()
ARRAY    數組是一組具有相同類型和名稱的變量的集合。這些變量稱爲數組的元素,每個數組元素都有一個編號,編號從零開始。例如,數組值爲[‘John’, ‘Doe’],那麼第2個元素可以通過數組名[1]進行引用    Array()
Hive有三種複雜數據類型ARRAY、MAP 和 STRUCT。ARRAY和MAP與Java中的Array和Map類似,而STRUCT與C語言中的Struct類似,它封裝了一個命名字段集合,複雜數據類型允許任意層次的嵌套。
案例實操
1.假設某表有如下一行,我們用JSON格式來表示其數據結構。在Hive下訪問的格式爲
{

    "name": "weixiaobao",

    "wives": ["zengrou" , "jianning"],       //列表Array,

    "children": {                      //鍵值Map,

        "hutou": 1 ,

        "shuangshuang": 1

    }

    "address": {                      //結構Struct,

        "street":"tong chi dao" ,

        "city":"liao dong"

    }

}
2.基於上述數據結構,我們在Hive裏創建對應的表,並導入數據    
創建本地測試文件test.txt

weixiaobao,zengrong_jianning,hutou:1_shuangshuang:1,tong chi dao_liao dong

注意,MAP,STRUCT和ARRAY裏的元素間關係都可以用同一個字符表示,這裏用“_”。
3.Hive上創建測試表test

create table test(

name string,

wives array<string>,

children map<string, int>,

address struct<street:string, city:string>

)

row format delimited fieldsterminated by ','

collection itemsterminated by '_'

map keys terminated by ':'

lines terminated by '\n';
字段解釋:

row format delimited fields terminatedby ','  -- 列分隔符

collection items terminated by'_'        --MAPSTRUCT 和 ARRAY 的分隔符(數據分割符號)

map keys terminated by ':'                          -- MAP中的key與value的分隔符

linesterminated by '\n';                              --行分隔符
4.導入文本數據到測試表

hive (default)> load data local inpath'/opt/module/datas/test.txt' into table test;
5.訪問三種集合列裏的數據,以下分別是ARRAY,MAP,STRUCT的訪問方式
hive (default)> select wives[1],children['xiaosong'],address.city from test where name="weixiaobao";

OK

_c0     _c1     city

jianning    1     liao dong

Timetaken: 0.076 seconds, Fetched: 1 row(s)
類型轉化
Hive的原子數據類型是可以進行隱式轉換的,類似於Java的類型轉換,例如某表達式使用INT類型,TINYINT會自動轉換爲INT類型,但是Hive不會進行反向轉化,例如,某表達式使用TINYINT類型,INT不會自動轉換爲TINYINT類型,它會返回錯誤,除非使用CAST 操作。
    隱式類型轉換規則如下
任何整數類型都可以隱式地轉換爲一個範圍更廣的類型,如TINYINT可以轉換成INT,INT可以轉換成BIGINT
所有整數類型、FLOAT和STRING類型都可以隱式地轉換成DOUBLE。
TINYINT、SMALLINT、INT都可以轉換爲FLOAT。
BOOLEAN類型不可以轉換爲任何其它的類型。
    可以使用CAST操作顯示進行數據類型轉換,例如CAST('1' AS INT)將把字符串'1' 轉換成整數1;如果強制類型轉換失敗,如執行CAST('X' AS INT),表達式返回空值 NULL

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