Hive_Hive 中数据类型介绍


参考的文章:

Hive 数据类型

https://edu.csdn.net/promotion_activity?id=3&utm_source=618qztt

Hive 学习之Hive 数据类型

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



Hive 中数据类型主要分为以下几种类型

数值类型

字符串类型

日期/时间类型

其他类型

复合类型

下面对上面的几种类型进行讲解:




数值类型

        Hive中的数值类型与Java中的数值类型很相似,区别在于有些类型的名称不一样。可以归结为以下几种类型

TINYINT , SMALLINT, INT  / INTEGER , BIGINT , FLOAT, DOUBLE , DECIMAL



下面按照这种方式进行展示 :

解释     类型名称      大小      最小值      最大值    示例



TINYINT

解释: 1-byte signed integer, from -128 to 127

大小:     1字节

最小值 : -128

最大值 : 127

示例:     45Y


-------------------------------


SMALLINT

解释:2-byte signed integer, from -32,768 to 32,767

大小 : 2字节

最小值:-32768

最大值 :  32767

示例:  100S


-------------------------------


INT  / INTEGER

解释 : 4-byte signed integer, from -2,147,483,648 to 2,147,483,647

大小 : 4字节

最小值 : -2,147,483,648

最大值 :2,147,483,647

示例: 36


-------------------------------


BIGINT

解释:8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

大小 :8字节

最小值 : -9,223,372,036,854,775,808

最大值 :9,223,372,036,854,775,807

示例: 2000L


--------------------------------------------------------------------------


超过BIGINT 的整型


大于BIGINT的数值,需要使用BD后缀以及Decimal(38,0)来处理,例:


select CAST(18446744073709001000BD AS DECIMAL(38,0)) from my_table limit 1;




----------------------------------------------------------------


FLOAT

解释:4-byte single precision floating point number

大小: 4字节

最小值: ---

最大值: ---

备注: 4字节单精度


------------------------------------------------------------

DOUBLE


解释 :8-byte double precision floating point number

大小:8字节

最小值: ---

最大值: ---

备注: 8字节双精度


----------------------------------


DECIMAL

解释:Decimal datatype was introduced in Hive 0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)

大小:     ---

最小值:  ---

最大值:  ---


Hive的小数型是基于Java BigDecimal做的, BigDecimal在java中用于表示任意精度的小数类型。

      所有常规数字运算(例如+, - ,*,/)和相关的UDFs(例如Floor,Ceil,Round等等)都使用和支持Decimal。

      你可以将Decimal和其他数值型互相转换,且Decimal支持科学计数法和非科学计数法。因此,无论您的数据集是否包含如4.004E + 3(科学记数法)或4004(非科学记数法)或两者的组合的数据,可以使用Decimal。 

     从Hive 0.13开始,用户可以使用DECIMAL(precision, scale) 语法在创建表时来定义Decimal数据类型的precision和scale。 

1)如果未指定precision,则默认为10

2)如果未指定scale,它将默认为0(无小数位)。


示例:

CREATE TABLE foo ( 
  a DECIMAL, – Defaults to decimal(10,0) 
  b DECIMAL(9, 7) 
)

Decimal在Hive 0.12.0 and 0.13.0之间是不兼容的,故0.12前的版本需要迁移才可继续使用,具体情况参见官网。



========================================

=========================================


字符串类型


Hive 中目前有三种字符串类型。

STRING, VARCHAR,CHAR 


STRING

     字符串文字可以用单引号(’)或双引号(“)表示。Hive在字符串中使用C风格的转义。 


VARCHAR

      Hive-0.12.0版本引入了VARCHAR类型,VARCHAR类型使用长度指示器(1到65355)创建,长度指示器定义了在字符串中允许的最大字符数量。

     Varchar类型使用长度说明符(介于1和65355之间)创建,它定义字符串中允许的最大字符数。 如果要转换/分配给varchar值的字符串值超过length说明符,则字符串将被静默截断。 字符长度由字符串包含的代码点的数量确定。像字符串一样,尾部空格在varchar中很重要,并且会影响比较结果。(VARCHAR)

     非通用UDFs不能直接使用varchar类型作为输入参数或返回值。 可以创建字符串UDFs,而varchar值将被转换为strings并传递到UDF。 要直接使用varchar参数或返回varchar值,请创建GenericUDF。 
     如果基于reflection-based方法来获取数据类型信息,则可能存在不支持varchar的场景。 这包括一些SerDe函数实现。 


CHAR

      Hive-0.13.0版本引入了CHAR类型。

     字符类型与Varchar类似,但它们是固定长度的,意味着比指定长度值短的值用空格填充,但尾随空格在比较期间不重要(CHAR) CHAR的最大长度固定为255。


创建示例:

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



============================================

============================================



日期/时间类型


Hive 目前支持3种时间类型,分别为:

TIMESTAMP ,DATE , INTERVAL

这3种类型的支持版本分别为:

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

下面分别对这3种类型进行说明


TIMESTAMP 

        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支持的类型转换为:

  整数类型:转换为秒级的UNIX时间戳。

  浮点数类型:转换为带小数精度的UNIX时间戳。

  字符串类型:适合java.sql.Timestamp格式"YYYY-MM-DD HH:MM:SS.fffffffff"(9位小数精度)。



DATE         

     Hive中DATE类型的值描述了特定的年月日,以YYYY-­MM-­DD格式表示,例如2014-05-29。DATE类型不包含时间,所表示日期的范围为0000-­01-­01 to 9999-­12-­31。这取决于Java Date类型的原始支持。


DATE类型仅可与DATE、TIMESTAMP、STRING类型相互转化,如下所示:

英文原文:


cast(date as date)

               :Same date value


cast(date as string)

              :The year/month/day represented by the Date is formatted as a string in the form ‘YYYY-MM-DD’.


cast(date as timestamp)

               : A timestamp value is generated corresponding to midnight of the year/month/day of the date value, based on the local timezone.


cast(string as date)

                 : If the string is in the form ‘YYYY-MM-DD’, then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.


cast(timestamp as date)

               : The year/month/day of the timestamp is determined, based on the local timezone, and returned as a date value.


中文翻译


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'格式的字符串。



INTERVAL

      时间间隔在1.2.0之后版本支持,在2.2.0版本上进行了扩展,具体情况参见官网。





=====================================================

=====================================================


其他类型


BOOLEAN

            :boolean 类型, 值为 true 与 false 两种类型。


BINARY (Note: Only available starting with Hive 0.8.0)

            :二进制类型。





=====================================================

=====================================================


复合类型


Hive 与传统的关系型数据库并不相同,Hive 支持 以 Java ,C 为原型的一些复杂数据结构。

支持的主要复杂数据结构有  Array,  Map,   Struct ,  Union :

下面分别对这几种数据类型做一介绍:


 Array:ARRAY<data_type>

 Map:MAP<primitive_type, data_type>

Struct: STRUCT<col_name : data_type [COMMENT col_comment], ...>

Union:UNIONTYPE<data_type, data_type, ...>


每个类型 Hive的支持版本:

Array :     Note: negative values and non-constant expressions are allowed as of Hive 0.14.

Map:       Note: negative values and non-constant expressions are allowed as of Hive 0.14.

Struct:     -

Union:     Note: Only available starting with Hive 0.7.0.



 注:UNIONTYPE目前还没有完全支持,官方建议只用于查看,详见官方文档。


创建 含 Union 类型表 的 示例:

CREATE TABLE  union_test(u UNIONTYPE<int, double, array<string>,struct<a:int,b:string>>);


查询 含 Union 类型婊 的 示例

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传递给该函数。


猜你喜欢

转载自blog.csdn.net/u010003835/article/details/80776547
今日推荐