Hive 數據類型


日期/時間類型

        Hive支持帶可選的納秒級精度的UNIX timestamp。Hive中的timestamp與時區無關,存儲為UNIX紀元的偏移量。Hive提供了用於timestamp和時區相互轉換的便利UDF:to_utc_timestamp和 from_utc_timestamp。Timestamp類型可以使用所有的日期時間UDF,如month、day、year等。文本文件中的Timestamp必須使用yyyy-mm-dd hh:mm:ss[.f...]的格式,如果使用其它格式,將它們聲明為合適的類型(INT、FLOAT、STRING等)並使用UDF將它們轉換為Timestamp。Timestamp支持的類型轉換為:

 

  1.   整數類型:轉換為秒級的UNIX時間戳。
  2.   浮點數類型:轉換為帶小數精度的UNIX時間戳。
  3.   字符串類型:適合java.sql.Timestamp格式"YYYY-MM-DD HH:MM:SS.fffffffff"(9位小數精度)。

 

        Hive中DATE類型的值描述了特定的年月日,以YYYY-­MM-­DD格式表示,例如2014-05-29。DATE類型不包含時間,所表示日期的范圍為0000-­01-­01 to 9999-­12-­31。DATE類型僅可與DATE、TIMESTAMP、STRING類型相互轉化,如下表所示:

類型轉換

結果

cast(date as date)

相同的日期。

cast(timestamp as date)

基於本地時區確定timestamp的年月日作為值返回。

cast(string as date)

如果字符串的格式為'YYYY-MM-DD', 則對應的年月日返回。如果字符串不是該格式,則返回NULL。

cast(date as timestamp)

基於本地時區,返回日期對應午夜時間。

cast(date as string)

日期被轉換為'YYYY-MM-DD'格式的字符串。

 

 

 Hive到0.13.0版本為止已經支持越來越多的數據類型,像傳統數據庫中的VCHAR、CHAR、DATE以及所特有的復合類型MAP、STRUCT等。Hive中的數據類型可以分為數值類型、字符串類型、日期時間類型、復合類型以及其它類型,下面分別予以介紹。

數值類型

        Hive中的數值類型與Java中的數值類型很相似,區別在於有些類型的名稱不一樣,可以概括為如下的表格:

類型名稱

大小

最小值

最大值

示例

TINYINT

1字節

-128

127

45Y

SMALLINT

2字節

-32768

32767

100S

INT

4字節

-2,147,483,648

2,147,483,647

36

BIGINT

8字節

-9,223,372,036,854,775,808

9,223,372,036,854,775,807

2000L

FLOAT

4字節

--

---

4字節單精度

DOUBLE

8字節

--

--

8字節雙精度

DECIMAL

--

--

--

DECIMAL(9, 7)

        默認情況下,整數常量被當做INT處理,除非整數常量超出了INT類型的取值范圍或者在整數常量跟着Y、S、L等后綴,則常量將會作為TINYINT、SMALLINT和BIGINT處理。Hive中的浮點數常量默認被當做DOUBLE類型。

        DECIMAL類型是在Hive-0.11.0版本中引入的,在Hive-0.13.0版本中做了改進。Hive中的DECIMAL基於Java中的BigDecimal,BigDecimal用於表示任意精度的不可修改的十進制數字。所有常規數字操作符(如+、-、*、/)和相關的UDFs(如Floor、Ceil、Round等)用於處理DECIMAL類型,可以轉換DECIMAL為其它數值類型或者將其它基本類型轉換為DECIMAL。DECIMAL類型支持科學計數法,所以不管數據集中是否包含1E+44或者4000或者二者的組合,都可以使用DECIMAL表示。Hive-0.11.0和Hive-0.12.0固定了DECIMAL類型的精度並限制為38位數字,從Hive-0.13.0開始可以指定DECIMAL的規模和精度,當使用DECIMAL類型創建表時可以使用DECIMAL(precision,scale)語法。例如:

 

create table decimal_test (d decimal);

  

 

        可以使用cast在DECIMAL和其它基本類型,如INT、DOUBLE、BOOLEAN之間轉換,如:

 

Select cast(d asboolean) from decimal_test;

  

        DECIMAL類型比DOUBLE類型為浮點數提供了精確的數值和更廣的范圍,DECIMAL類型存儲了數值的精確地表示,而DOUBLE類型存儲了非常接近數值的近似值。當DOUBLE類型的近似值精度不夠時可以使用DECIMAL類型,比如金融應用,等於和不等於檢查以及舍入操作,當數值超出了DOUBLE類型的范圍(大約-10308 to 10308)或者非常接近於0(-10-308 to 10-308)時,也可以使用DECIMAL類型。

字符串類型

        字符串常量使用單引號或者雙引號表示,Hive使用C語言風格對字符串進行轉義。Hive-0.12.0版本引入了VARCHAR類型,VARCHAR類型使用長度指示器(1到65355)創建,長度指示器定義了在字符串中允許的最大字符數量。如果一個字符串值轉換為或者被賦予一個varchar值,其長度超過了長度指示器則該字符串值會自動被截斷。目前還沒有通用的UDF可以直接用於VARCHAR類型,可以使用String UDF代替,VARCHAR將會轉換為String再傳遞給UDF。Hive-0.13.0版本引入了CHAR類型,CHAR類型與VARCHAR類型相似,但擁有固定的長度,也就是如果字符串長度小於指示器的長度則使用空格填充。CHAR類型的最大長度為255。使用VARCHAR、CHAR創建表的例子如下:

 

CREATE TABLE test(c CHAR(10), vc VARCHAR(30));

  

復合類型

        Hive支持4種復合數據類型,分別為:

  1.   Array:ARRAY<data_type>
  2.   Map:MAP<primitive_type, data_type>
  3.   Struct: STRUCT<col_name : data_type [COMMENT col_comment], ...>
  4.   Union:UNIONTYPE<data_type, data_type, ...>

 

        UNIONTYPE類型可以在任何一個點精確地持有它所指定數據類型的一種,使用UNIONTYPE的例子如下:

 

CREATE TABLEunion_test(u UNIONTYPE<int, double, array<string>,struct<a:int,b:string>>);
SELECT u FROMunion_test;
{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":5,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:9}
{1:10.0}

  

        在該例子中,union包含四種類型,分別為int、double、array和struct。從查詢結果來看,第一個冒號前面的數字tag代表union中某種數據類型,比如0代表union的第一個數據類型int,1代表第二個數據類型double,2代表第三個數據類型array,3代表第四個數據類型struct。

        可以使用create_union UDF創建該類型,在使用該UDF時必須將數字tag傳遞給該函數。

其它類型

        Hive支持的其它類型有BOOLEAN和BINARY

 

轉自: https://blog.csdn.net/skywalker_only/article/details/27547515

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM