HIVE data Types(六)

HIVE data Types

HIVE支持基本数据类型和一些复杂的数据类型。

Numeric Types

  • TINYINT (1-byte signed integer, from -128 to 127)
  • SMALLINT (2-byte signed integer, from -32,768 to 32,767)
  • INT/INTEGER (4-byte signed integer, from -2,147,483,648 to 2,147,483,647)
  • BIGINT (8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807)
  • FLOAT (4-byte single precision floating point number)
  • DOUBLE (8-byte double precision floating point number)
  • DECIMAL
    Introduced in Hive 0.11.0 with a precision of 38 digits
    Hive 0.13.0 introduced user-definable precision and scale
  • NUMERIC (same as DECIMAL, starting with Hive 3.0.0)

默认的整数存储类型为INT,除非数值超过int的限制将会被存储为BIGINT,或者指定后缀来指定数值为特定的整数类型,在使用float和double时需要注意小数存储带来的精度问题,做基本运算也可能带来精度损失,若是对精度要求很高推荐使用decimal。

  • TINYINT,后缀Y,例如 100Y
  • SMALLINT,后缀S,例如100S
  • BIGINT,后缀L,例如100L

Date/Time

  • TIMESTAMP (Note: Only available starting with Hive 0.8.0)
  • DATE (Note: Only available starting with Hive 0.12.0)
  • INTERVAL (Note: Only available starting with Hive 1.2.0)

string,date,timestamp三者之间可以使用cast来转换

String

  • STRING
  • VARCHAR (Note: Only available starting with Hive 0.12.0)
  • CHAR (Note: Only available starting with Hive 0.13.0)

string 使用单引号’或者双引号”包裹表示。Varchar可以指定的最大长度为65535,如果一个string字符串被转换为Varchar并且超过varchar的最大长度,string会被截取。char最大长度是255.
注意现在没有通用的udf可以直接使用varchar作为参数或者返回值,一般使用string来代替。

Misc

  • BOOLEAN
    • BOOLEAN—TRUE/FALSE
  • BINARY (Note: Only available starting with Hive 0.8.0)
    • BINARY—a sequence of bytes

Complex

  • arrays: ARRAY< data_type> (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)
    • create table test(col1 array< string>)
    • select array(‘q’,’w’,’e’)
    • 使用A[n]进行访问,n为整数
  • maps: MAP< rimitive_type, data_type> (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)
    • create table test(col1 map< string,string>),并且key是基本数据类型,也就是key不能是complex类型的。
    • select map(‘1’,’w’,’2’,’e’),都是,隔开,不是冒号
    • 使用M[key]进行访问,key为map总的key。
  • structs: STRUCT< col_name : data_type [COMMENT col_comment], …>
    • create table(col struct< col1:string,col2,string,col3,string>
    • select struct(‘a’,’b’,’c’)
    • 使用S.x访问,x为struct中的字段。
  • union: UNIONTYPE< data_type, data_type, …> (Note: Only available starting with Hive 0.7.0.)

unointype类型的支持并没有完成,现在unointype不能够使用join,where,和group by,并且hive没有定义语法来抽取字段或者值,这以为这unointype目前只能查看。uniontype可以通过udf create_union来进行创建。

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"}}


CREATE TABLE union_test(foo UNIONTYPE, struct>);
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}

参考文献

1.HIVE Tutorial
2.HIVE TYPES

你可能感兴趣的:(hive)