博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive 数据类型
阅读量:5030 次
发布时间:2019-06-12

本文共 3367 字,大约阅读时间需要 11 分钟。

日期/时间类型

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

 

  1.   整数类型:转换为秒级的UNIX时间戳。
  2.   浮点数类型:转换为带小数精度的UNIX时间戳。
  3.   字符串类型:适合java.sql.Timestamp格式"YYYY-MM-DD HH:MM:SS.fffffffff"(9位小数精度)。

 

        Hive中DATE类型的值描述了特定的年月日,以YYYY-­MM-­DD格式表示,例如2014-05-29。DATE类型不包含时间,所表示日期的范围为0000-­01-­01 to 9999-­12-­31。DATE类型仅可与DATE、TIMESTAMP、STRING类型相互转化,如下表所示:

类型转换

结果

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

 

 

 Hive到0.13.0版本为止已经支持越来越多的数据类型,像传统数据库中的VCHAR、CHAR、DATE以及所特有的复合类型MAP、STRUCT等。Hive中的数据类型可以分为数值类型、字符串类型、日期时间类型、复合类型以及其它类型,下面分别予以介绍。

数值类型

        Hive中的数值类型与Java中的数值类型很相似,区别在于有些类型的名称不一样,可以概括为如下的表格:

类型名称

大小

最小值

最大值

示例

TINYINT

1字节

-128

127

45Y

SMALLINT

2字节

-32768

32767

100S

INT

4字节

-2,147,483,648

2,147,483,647

36

BIGINT

8字节

-9,223,372,036,854,775,808

9,223,372,036,854,775,807

2000L

FLOAT

4字节

--

---

4字节单精度

DOUBLE

8字节

--

--

8字节双精度

DECIMAL

--

--

--

DECIMAL(9, 7)

        默认情况下,整数常量被当做INT处理,除非整数常量超出了INT类型的取值范围或者在整数常量跟着Y、S、L等后缀,则常量将会作为TINYINT、SMALLINT和BIGINT处理。Hive中的浮点数常量默认被当做DOUBLE类型。

        DECIMAL类型是在Hive-0.11.0版本中引入的,在Hive-0.13.0版本中做了改进。Hive中的DECIMAL基于Java中的BigDecimal,BigDecimal用于表示任意精度的不可修改的十进制数字。所有常规数字操作符(如+、-、*、/)和相关的UDFs(如Floor、Ceil、Round等)用于处理DECIMAL类型,可以转换DECIMAL为其它数值类型或者将其它基本类型转换为DECIMAL。DECIMAL类型支持科学计数法,所以不管数据集中是否包含1E+44或者4000或者二者的组合,都可以使用DECIMAL表示。Hive-0.11.0和Hive-0.12.0固定了DECIMAL类型的精度并限制为38位数字,从Hive-0.13.0开始可以指定DECIMAL的规模和精度,当使用DECIMAL类型创建表时可以使用DECIMAL(precision,scale)语法。例如:

 

create table decimal_test (d decimal);

  

 

        可以使用cast在DECIMAL和其它基本类型,如INT、DOUBLE、BOOLEAN之间转换,如:

 

Select cast(d asboolean) from decimal_test;

  

        DECIMAL类型比DOUBLE类型为浮点数提供了精确的数值和更广的范围,DECIMAL类型存储了数值的精确地表示,而DOUBLE类型存储了非常接近数值的近似值。当DOUBLE类型的近似值精度不够时可以使用DECIMAL类型,比如金融应用,等于和不等于检查以及舍入操作,当数值超出了DOUBLE类型的范围(大约-10308 to 10308)或者非常接近于0(-10-308 to 10-308)时,也可以使用DECIMAL类型。

字符串类型

        字符串常量使用单引号或者双引号表示,Hive使用C语言风格对字符串进行转义。Hive-0.12.0版本引入了VARCHAR类型,VARCHAR类型使用长度指示器(1到65355)创建,长度指示器定义了在字符串中允许的最大字符数量。如果一个字符串值转换为或者被赋予一个varchar值,其长度超过了长度指示器则该字符串值会自动被截断。目前还没有通用的UDF可以直接用于VARCHAR类型,可以使用String UDF代替,VARCHAR将会转换为String再传递给UDF。Hive-0.13.0版本引入了CHAR类型,CHAR类型与VARCHAR类型相似,但拥有固定的长度,也就是如果字符串长度小于指示器的长度则使用空格填充。CHAR类型的最大长度为255。使用VARCHAR、CHAR创建表的例子如下:

 

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

  

复合类型

        Hive支持4种复合数据类型,分别为:

  1.   Array:ARRAY<data_type>
  2.   Map:MAP<primitive_type, data_type>
  3.   Struct: STRUCT<col_name : data_type [COMMENT col_comment], ...>
  4.   Union:UNIONTYPE<data_type, data_type, ...>

 

        UNIONTYPE类型可以在任何一个点精确地持有它所指定数据类型的一种,使用UNIONTYPE的例子如下:

 

CREATE TABLEunion_test(u UNIONTYPE
,struct
>);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传递给该函数。

其它类型

        Hive支持的其它类型有BOOLEAN和BINARY

 

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

 

转载于:https://www.cnblogs.com/Allen-rg/p/9592400.html

你可能感兴趣的文章
设计网站大全
查看>>
JVM CUP占用率过高排除方法,windows环境
查看>>
【转】JAVA字符串格式化-String.format()的使用
查看>>
【转】ButterKnife基本使用--不错
查看>>
【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”...
查看>>
函数中关于const关键字使用的注意事项
查看>>
微信架构(转)
查看>>
Web项目中的路径问题
查看>>
js随机数的取整
查看>>
关于解析漏洞
查看>>
十大经典预测算法(六)---集成学习(模型融合算法)
查看>>
用php做一个简单的注册用户功能
查看>>
一款基于css3的3D图片翻页切换特效
查看>>
Feign使用Hystrix无效原因及解决方法
查看>>
Sizeof与Strlen的区别与联系
查看>>
hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
查看>>
Flutter 贝塞尔曲线切割
查看>>
golang 的编译安装以及supervisord部署
查看>>
easyui源码翻译1.32--Dialog(对话框窗口)
查看>>
阿里架构师,讲述基于微服务的软件架构模式
查看>>