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)


免責聲明!

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



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