1. 程式人生 > 其它 >hive 資料型別(四)

hive 資料型別(四)

1. 基本資料型別

Hive資料型別 Java資料型別 長度 例子
TINYINT byte 1byte有符號整數 20
SMALINT short 2byte有符號整數 20
INT int 4byte有符號整數 20
BIGINT long 8byte有符號整數 20
BOOLEAN boolean 布林型別,true或者false TRUE FALSE
FLOAT float 單精度浮點數 3.14159
DOUBLE double 雙精度浮點數 3.14159
STRING string 字元系列。可以指定字符集。可以使用單引號或者雙引號。 ‘now is the time’ “for all good men”
TIMESTAMP 時間型別
BINARY 位元組陣列
deicimal 任意精度的帶符號小數 1.0
varchar 變長字串 "a", "b"
char 固定長度字串 "a", "b"
binary 位元組陣列
timestamp 時間戳,納秒精度 122327493795
date 日期 2018-04-07

HiveString 型別相當於資料庫的varchar型別,該型別是一個可變的字串,不過它不能宣告其中最多能儲存多少個字元,理論上它可以儲存2GB的字元數;資料型別都是對 Java 中介面的實現,因此這些型別的具體行為細節和Java

中對應的型別是完全一致的

2. 集合資料型別

資料型別 描述 語法示例
STRUCT 和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如,如果某個列的資料型別是STRUCT{first STRING, last STRING},那麼第1個元素可以通過欄位.first來引用。 struct()
MAP MAP是一組鍵-值對元組集合,使用陣列表示法可以訪問資料。例如,如果某個列的資料型別是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼可以通過欄位名[‘last’]獲取最後一個元素 map()
ARRAY 陣列是一組具有相同型別和名稱的變數的集合。這些變數稱為陣列的元素,每個陣列元素都有一個編號,編號從零開始。例如,陣列值為[‘John’, ‘Doe’],那麼第2個元素可以通過陣列名[1]進行引用。 Array()

示例

1、建立表:

hive (hive_1)> create table test(
             > name string,
             > friends array<string>,
             > children map<string, int>,
             > address struct<street:string, city:string>
             > )
             > row format delimited fields terminated by ','	// 列分隔符
             > collection items terminated by '_'	// MAP STRUCT 和 ARRAY 的分隔符(資料分割符號)
             > map keys terminated by ':'		// MAP中的key與value的分隔符
             > lines terminated by '\n';		// 行分隔符
OK
Time taken: 0.894 seconds

// 查看錶結構
hive (hive_1)> desc test;
OK
col_name        data_type       comment
name                    string
friends                 array<string>
children                map<string,int>
address                 struct<street:string,city:string>
Time taken: 0.593 seconds, Fetched: 4 row(s)
hive (hive_1)> load data local inpath '/home/hadoop/apps/my_code/test.txt' into table test;
Loading data to table hive_1.test
Table hive_1.test stats: [numFiles=1, totalSize=144]
OK
Time taken: 1.675 seconds

2、要插入的資料:

// [hadoop@hadoop1 apps]$ cat my_code/test.txt

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

3、匯入資料、查詢:

hive (hive_1)> select * from test;
OK
test.name       test.friends    test.children   test.address
songsong        ["bingbing","lili"]     {"xiao song":18,"xiaoxiao song":19}     {"street":"hui long guan","city":"beijing"}
yangyang        ["caicai","susu"]       {"xiao yang":18,"xiaoxiao yang":19}     {"street":"chao yang","city":"beijing"}
Time taken: 0.998 seconds, Fetched: 2 row(s)


hive (hive_1)> select friends[1], children['xiao song'], address.city from test where name='songsong';
OK
_c0     _c1     city
lili    18      beijing
Time taken: 0.792 seconds, Fetched: 1 row(s)

3. 型別轉換

Hive 的院子資料型別可以隱式轉換,類似於 Java 的型別轉換,如:tinyint 會自動轉換為 int,但反過來就需要使用 cast 顯示(轉換)操作

隱式轉換規則:

  • 任何整數型別都可以隱式地轉換為一個範圍更廣的型別,如:tinyint -> int
  • 所有整數型別、float、string 都可以轉為 double
  • Boolean 不能轉為其他任何型別

**cast 顯示轉換 **

// 把字串'1' 轉換成整數1,轉換失敗,返回 NULL
CAST('1' AS INT)

4. 資料格式

hive 資料預設儲存在 hdfs 檔案系統的 /user/hive/warehouse目錄下,預設資料格式:textfile,不壓縮,其他資料格式還有:SequenceFile、RCFile 、ORCFile、Parquet

具體可參考:Hive學習之路 (六)Hive SQL之資料型別和儲存格式