HIVE数据类型转换decimal是整数数据类型
在⽂章中,我们提到了Hive内置数据类型由基本数据类型和复杂数据类型组成。今天的话题是Hive数据类型之间的转换。同Java语⾔⼀样,Hive也包括隐式转换(implicit conversions)和显式转换(explicitly conversions)。
Hive在需要的时候将会对numeric类型的数据进⾏隐式转换。⽐如我们对两个不同数据类型的数字进⾏⽐较,假如⼀个数据类型是INT 型,另⼀个是SMALLINT类型,那么SMALLINT类型的数据将会被隐式转换地转换为INT类型,这个到底和Java中的⼀样;但是我们不能隐式地将⼀个 INT类型的数据转换成SMALLINT或TINYINT类型的数据,这将会返回错误,除⾮你使⽤了CAST操作。
任何整数类型都可以隐式地转换成⼀个范围更⼤的类型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式地转换成DOUBLE;是的你没看出,STRING也可以隐式地转换成DOUBLE!但是你要记住,BOOLEAN类型不能转换为其他任何数据类型!
下标列出了Hive内置的数据类型之间是否可以进⾏隐式的转换操作:
bl tinyint si int bigint float double dm string vc ts date ba boolean true false false false false false false false false false false false false tinyint false true true true true true true true true true false false false smallint false false true true true true true true true true false false false
int false false false true true true true true true true false false false bigint false false false false true true true true true true false false false float false false false false false true true true true true false false false double false false false false false false true true true true false false false decimal false false false false false false false true true true false false false string false false false false false false true true true true false false false varchar false false false false false false true true true true false false false
ts false false false false false false false false true true true false false date false false false false false false false false true true false true false binary false false false false false false false false false false false false true
注:由于表格⽐较⼤,这⾥对⼀些⽐较长的字符串进⾏缩写,ts是timestamp的缩写,bl是boolean的缩写,sl是smallint的缩写,dm是decimal的缩写,vc是varchar的缩写,ba是binary的缩写。
我们可以⽤CAST来显式的将⼀个类型的数据转换成另⼀个数据类型。如何使⽤?CAST的语法为cast(value AS TYPE)。举个例⼦:假如我们⼀个员⼯表employees,其中有name、salary等字段;salary是字符串类型的。有如下的查询:
1SELECT name, salary FROM employees
2WHERE cast(salary AS FLOAT) <</code> 100000.0;
这样salary将会显⽰的转换成float。如果salary是不能转换成float,这时候cast将会返回NULL!
对cast有⼀下⼏点需要说明的:
(1)、如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,⽽不是通过cast实现!
(2)、对于BINARY类型的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型数据是⼀个数字类型(a number),这时候你可以利⽤嵌套的cast操作,⽐如a是⼀个BINARY,且它是⼀个数字类型,那么你可以⽤下⾯的查询:
1SELECT (cast(cast(a as string) as double)) from src;
我们也可以将⼀个String类型的数据转换成BINARY类型。
(3)、对于Date类型的数据,只能在Date、Timestamp以及String之间进⾏转换。下表将进⾏详细的说明:
有效的转换结果
cast(date as date)返回date类型
cast(timestamp as
timestamp中的年/⽉/⽇的值是依赖与当地的时区,结果返回date类型
date)
cast(string as date)如果string是YYYY-MM-DD格式的,则相应的年/⽉/⽇的date类型的数据将会返回;但如果string不是YYYY-MM-DD格式的,结果则会返回NULL。
cast(date as
timestamp)基于当地的时区,⽣成⼀个对应date的年/⽉/⽇的时间戳值
cast(date as string)date所代表的年/⽉/⽇时间将会转换成YYYY-MM-DD的字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论