翻譯自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
列類型
Hive支持的數據類型如下:
原生類型:
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- STRING
- BINARY (Hive 0.8.0以上才可用)
- TIMESTAMP (Hive 0.8.0以上才可用)
復合類型:
- arrays: ARRAY<data_type>
- maps: MAP<primitive_type, data_type>
- structs: STRUCT<col_name : data_type [COMMENT col_comment], ...>
- union: UNIONTYPE<data_type, data_type, ...>
時間戳
支持傳統的unix時間戳,可選的納秒級精度。
支持的轉換:
- 整型數值類型:解讀為以秒為單位的UNIX時間戳
- 浮動點數值類型:解讀為以秒和小數精度為單位的UNIX時間戳。
- 字符串:JDBC兼容的java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小數位精度)
時間戳被解釋是與timezone無關,存儲為從UNIX紀元的偏移量。提供便利的UDF和時區轉換(to_utc_timestamp,from_utc_timestamp)。
所有現有datetime的UDF(月,日,年,小時,等)可以工作於TIMESTAMP數據類型。
Union類型
Union類型可以在同一時間點,保持恰好有一個指定的數據類型。您可以使用create_union的UDF創建一個實例的類型:
CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>); SELECT foo FROM union_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的發序列化來說是一個tag,讓它知道哪個union的部分被使用。在例子0,表明聲明的第一個數據類型,即是int,其他如此。
創建union,必須提供為create_union UDF提供tag。
SELECT create_union(0, key), create_union(if(key<100, 0, 1), 2.0, value), create_union(1, "a", struct(2, "b")) FROM src LIMIT 2; {0:"238"} {1:"val_238"} {1:{"col1":2,"col2":"b"}} {0:"86"} {0:2.0} {1:{"col1":2,"col2":"b"}}
常量
數值類型
默認,數值類型認為是INT,除非INT超出了INT的范圍,那么會被解釋為BIGINT,或者是如下的后綴在數值中被使用。
Type | Postfix | Example |
---|---|---|
TINYINT | Y | 100Y |
SMALLINT | S | 100S |
BIGINT | L | 100L |
字符串類型
字符串可以用單引號(')或雙引號(“)。Hive在字符串中使用C-Style的轉義。
浮點類型
浮點類型數值,被假定為雙浮點類型。目前還不支持科學記數法。
NULL值的處理
遺漏的值被代表為特殊值NULL。 要導入NULL字段的數據,需要查閱使用的SerDe的文檔。 (默認的文本格式使用LazySimpleSerDe的解釋字符串\ N為NULL)