hive數據類型(翻譯自Hive Wiki)

翻譯自 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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章