1. 程式人生 > >Hive-資料型別

Hive-資料型別

1、基本資料型別

注意:對於 Hive 的 String 型別相當於資料庫的 varchar 型別,該型別是一個可變的字串, 不過它不能宣告其中最多能儲存多少個字元,理論上它可以儲存 2GB 的字元數。

2、集合資料型別

Hive 有三種複雜資料型別 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 與 Java 中 的 Array 和 Map 類似,而 STRUCT 與 C 語言中的 Struct 類似,它封裝了一個命名欄位集合, 複雜資料型別允許任意層次的巢狀。

3、案例實操:

1)假設某表有如下一行,我們用 JSON 格式來表示其資料結構。在 Hive 下訪問的格式為

2)基於上述資料結構,我們在 Hive 裡建立對應的表,並匯入資料。

建立本地測試檔案 test.txt

注意,MAP,STRUCT 和 ARRAY 裡的元素間關係都可以用同一個字元表示,這裡用“_”。

3)Hive 上建立測試表 test

欄位解釋:

row format delimited fields terminated by ','        -- 列分隔符

collection items terminated by '_'                        --MAP STRUCT 和 ARRAY 的分隔符(資料分割符號)

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

lines terminated by '\n';                                       -- 行分隔符

4)匯入文字資料到測試表

5)訪問三種集合列裡的資料,以下分別是 ARRAY,MAP,STRUCT 的訪問方式

4、型別轉化

Hive 的原子資料型別是可以進行隱式轉換的,類似於 Java 的型別轉換,例如某表達 式使用 INT 型別,TINYINT 會自動轉換為 INT 型別,但是 Hive 不會進行反向轉化,例如, 某表示式使用 TINYINT 型別,INT 不會自動轉換為 TINYINT 型別,它會返回錯誤,除非使 用 CAST 操作。

1)隱式型別轉換規則如下。

(1)任何整數型別都可以隱式地轉換為一個範圍更廣的型別,如 TINYINT 可以轉換 成 INT,INT 可以轉換成 BIGINT。

(2)所有整數型別、FLOAT 和 STRING 型別都可以隱式地轉換成 DOUBLE。

(3)TINYINT、SMALLINT、INT 都可以轉換為 FLOAT。

(4)BOOLEAN 型別不可以轉換為任何其它的型別。

2)可以使用 CAST 操作顯示進行資料型別轉換,例如 CAST('1' AS INT)將把字串'1' 轉換 成整數 1;如果強制型別轉換失敗,如執行 CAST('X' AS INT),表示式返回空值 NULL。