目錄
正文一、基本數據類型
hive數據類型 java數據類型 長度 例子 INT int 4byte有符號整數 20 BIGINT long 8byte有符號整數 20 DOUBLE double 雙精度浮點數 3.14159 STRING string 字符系列。可以指定字符集。可以使用單引號或者雙引號 'now is the time' "for all good men" 對於hive的string類型相當於數據庫的varchar類型。該類型是一個可變的字符串,它不能聲明其中能存儲多少個字符,理論上可以存儲2GB的字符數
二、集合數據類型
數據類型 描述 語法示例 STRUCT 和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如:如果某個列的數據類型是STRUCT{first STRING, last STRING},那麼第一個元素可以通過字段first來引用 struct() MAP MAP是一組鍵-值對元組集合,使用數組表示法可以訪問數據。例如:如果某個列的數據類型是MAP,其中鍵-值對時'frist'->'John'和'last'->'Doe',那麼可以通過字段名{'last'}獲取最後一個元素
map() ARRAY 數組是一組具有相同類型和名稱的變量的集合,這些變量稱爲數組的元素,每個數組元素都有一個編號,編號從零開始。例如:數組值爲['John','Doe'],那麼第二個元素可以通過數組名[1]進行引用 Array()
例子,基於下面json格式的數據導入
{ "name": "songsong", "friends": ["bingbing", "lili"], //列表Array "children": { //鍵值Map "xiao song": 18, "xiaoxiao song": 19 } "address": { //結構Struct "street": "hui long guan", "city": "beijing" } } //創建本地測試文件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 //建表語句 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' //行分隔符 //導入文本數據到測試表 load data local inpath "/opt/module/datas/test.txt" into table test //指定數組元素訪問 select friends[1] from test //指定鍵值對訪問 select children['xiao song'] from test //結構體訪問 select address.city from test
MAP和ARRAY與Java中的相似,STRUCT與C語言中的struct類似,封裝了一個命名字段集合
三、類型轉化
hive的源自數據類型可以進行隱式轉換,不會進行反向轉換,除非使用CAST操作
隱式類型轉換
- 任何整數類型都可以隱式地轉換爲一個更廣的類型,如TINYINT可以轉換成INT,INT可以轉換成BIGINT
- 所有整數類型、FLOAT和STRING類型都可以隱式地轉換成DOUBLE
- TINYINT、SMALLINT、INT都可以轉換成FLOAT
- BOOLEA類型不可以轉換成爲其他任何類型
使用CAST操作顯示進行數據類型轉換
- 例如:CAST('1' AS INT)將把字符串‘1’轉換成整數1;如果強制類型轉換失敗,如執行CAST('1' AS INT),表達式返回值爲NULL