暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Hive系列01] Hive常用数据类型

数据分析师的FIRE人生 2021-06-01
417

点击上方「数据分析师的FIRE人生」→

点击右上角「...」→设为星标


大家好,我是风影楼,一名互联网公司的数据分析师。之前我曾在CSDN编写了Hive系列的付费博客专栏,目前收获了25W次的访问,不过由于CSDN的付费设置无法取消,所以我决定在公众号重新免费分享一遍。第一篇就从Hive数据类型开始介绍。

1.常用基本数据格式

TINYINT 1byte有符号整数

范围及举例:[-128 , 127]  

                        

SMALINT 2byte有符号整数

范围及举例:[-32768 , 32767] 


INT 4byte有符号整数

范围及举例:

[-2147483648 , 2147483647]


BIGINT 8byte有符号整数

范围及举例:

[-9223372036854775808 , 9223372036854775807]


BOOLEAN 布尔 

范围及举例:true/false


FLOAT 4byte单精度浮点数

范围及举例:

[-3.40E+38 , +3.40E+38]


DOUBLE 8byte双精度浮点数

范围及举例:

[-1.79E+308 , +1.79E+308]


STRING 字符序列,可用单引号或双引号

范围及举例:'abc',"abc "


TIMESTAMP 整数、浮点数或字符串

范围及举例:

1.整数:1327882394(Unix新纪元秒)

2.浮点数:1327882394.123456789(Unⅸ新纪元秒并跟随有纳秒数)

3.字符串:  '2019-04-10 12:34:56.123456789'


另Hive的基本数据类型还包括一个BINARY,但工作中基本接触不到,故不在此介绍,感兴趣的同学可自行百度。

2. 常用的集合数据类型

ARRAY


数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为['A','B',],那么第2个元素可以通过数组名[1]进行引用


举例:

X[1,2,3]

X[0]=1

X[1]=2

X[2]=3

另Hive有集合数据类型还包括STRUCT,MAP,但工作中基本接触不到,故不在此介绍,感兴趣的同学可自行百度。

3. Hive和其他SQL的数据格式有何区别

在其他SQL方言中,通常会提供限制最大长度的“字符数组”(也就是很多字符串)类型,但Hive中不支持这种数据类型。


关系型数据库提供这个功能是出于性能优化的考虑。因为定长的记录更容易进行建立索引,数据扫描,等等。


在Hive所处的“宽松”的世界里,不一定拥有数据文件但必须能够支持使用不同的文件格式,Hive根据不同字段间的分隔符来对其进行判断。同时, Hadoop和Hive强调优化磁盘的读和写的性能,而限制列的值的长度相对来说并不重要。

4. TIMESTAMP

新增数据类型 TIMESTAMP的值可以是整数,也就是距离Unix新纪元时间(1970年1月1日,午夜12点)的秒数;也可以是浮点数,即距离Unix新纪元时间的秒数,精确到纳秒(小数点后保留9位数);还可以是字符串,即JDBC所约定的时间字符串格式,格式为YYYY-MM-DD hh:mm:ss.fffff

5. 数据类型转换

5.1 显式转换

使用cast函数可以对指定的值进行数据类型转换。


cast(value AS TYPE)


value是需要被转换的数据, AS是固定关键字,type是需要转换的类型

常用转换一般是数字类型和字符串之间进行互转,如:


cast(2019 AS STRING)

cast('2019' AS INT)


当然cast的转换功能也不是万能的,必须是“存储的类型值”符合转换条件才能进行转换,否则会返回NULL,比如“XYZ”转换成FLOAT,很明显XYZ不是数值,所以转换失败,结果返回NULL值。


此外,如果使用cast将值范围较大的数据类型转换成值范围较小的数据类型,cast函数会直接截取,损失数据精度甚至得到错误结果,需要慎用。


5.2 隐式转换

当有以下不同数据类型的列互相运算时,Hive会自动把值范围较小的数据类型转为值范围较大的数据类型。


大小顺序如下:

TINYINT < SMALINT < INT < BIGINT < FLOAT < DOUBLE


虽然Hive自带隐式转换功能,但是不同数据类型进行join时有可能引发数据倾斜,建议尽量使用cast函数进行格式转换后再join。

文章转载自数据分析师的FIRE人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论