Hive系列 (六):Hive数据类型转换

Hive系列 (六):Hive数据类型转换hive 数据类型转换规则及转换原则 日期类型转换

Hive系列文章

Hadoop完全分布式搭建(腾讯云服务器+阿里云服务器)

Hive系列 (一):Hive搭建

Hive系列 (二):Hive基础知识

Hive系列 (三):Hive开窗函数详解

Hive系列 (四):自定义函数UDF UDTF UDAF

Hive系列 (五):Hive数据类型

Hive系列 (六):Hive数据类型转换

Hive系列 (七):Hive常用函数

Hive系列 (八):Hive中的explode 与 lateral view

Hive系列 (九):Hive数据存储

Hive系列 (十):Hive调优

数据类型转换

同其他语言一样,Hive也包含隐式转换显式转化

  1. Hive会对numeric类型的数据进行隐式转换。
  2. 任何整数类型都可以隐式地转换成一个范围更大的类型。
  3. TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式 地转换成DOUBLE;BOOLEAN类型不能转换为其他任何数据类型。
  4. 可以使用CAST操作显示进行数据类型转换,例如CAST(‘1’ AS INT)将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL

Cast显示转换

可以用CAST来显式的将一个类型的数据转换成另一个数据类型,其语法为cast(value AS TYPE)

0: jdbc:hive2://master:10000> select stu_id,chinese from myhive.stu_scores where stu_id = 10001; OK +---------+----------+ | stu_id | math | +---------+----------+ | 10001 | 70.0 | +---------+----------+ 1 row selected (4.558 seconds) 0: jdbc:hive2://master:10000> select stu_id,cast(math as float) as math from myhive.stu_scores where stu_id = 10001; OK +---------+-------+ | stu_id | math | +---------+-------+ | 10001 | 70.0 | +---------+-------+ 1 row selected (4.105 seconds) 0: jdbc:hive2://master:10000>  # 这样math将会显示的转换成float。如果math是不能转换成float,这时候cast将会返回NULL 

注意事项:

  1. 如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现。
  2. 对于binary类型的数据,只能将binary类型的数据转换成string类型。
  3. 只有binary类型数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作
    select(cast(cast(a as string) as double)) from tb1 

数据类型转换表

boolean tinyint smallint int bigint float double decimal string varchar timestamp date binary
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
timestamp 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

日期类型转换说明

有效的转换 结果
cast(date as date) 返回date类型
cast(timestamp as date) timestamp中的年/月/日的值是依赖与当地的时区,结果返回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的字符串

转换示例

日期与字符串转换

# cast(string as date) # 不是YYYY-MM-DD格式返回null 0: jdbc:hive2://master:10000> select cast('' as date); OK +-------+ | _c0 | +-------+ | NULL | +-------+ 1 row selected (2.135 seconds) 0: jdbc:hive2://master:10000> select cast('2021-08-25' as date); OK +-------------+ | _c0 | +-------------+ | 2021-08-25 | +-------------+ 1 row selected (2.167 seconds) # 日期转字符串 0: jdbc:hive2://master:10000> select cast(current_date() as string); OK +-------------+ | _c0 | +-------------+ | 2021-08-25 | +-------------+ 1 row selected (2.291 seconds) 0: jdbc:hive2://master:10000>  

时间戳与日期转换

# cast(timestamp as date) # 显示当前时间戳current_timestamp() 0: jdbc:hive2://master:10000> select current_timestamp(); OK +--------------------------+ | _c0 | +--------------------------+ | 2021-08-25 16:35:27.249 | +--------------------------+ 1 row selected (2.287 seconds) # 时间戳转日期 0: jdbc:hive2://master:10000> select cast(current_timestamp() as date); OK +-------------+ | _c0 | +-------------+ | 2021-08-25 | +-------------+ 1 row selected (2.399 seconds) # 日期转时间戳 0: jdbc:hive2://master:10000> select cast(current_date() as timestamp); OK +------------------------+ | _c0 | +------------------------+ | 2021-08-25 00:00:00.0 | +------------------------+ 1 row selected (2.325 seconds) 0: jdbc:hive2://master:10000> 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233134.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月13日 上午8:01
下一篇 2025年8月13日 上午8:22


相关推荐

  • HelixServe搭建局域网流媒体服务器

    HelixServe搭建局域网流媒体服务器查了两天资料,有了些眉目,在成功搭建数次之后把这篇博客补上    但成功搭建并不是一蹴而就的,从开始的一脸懵逼,到中途的困难频繁造访几欲放弃打算转向研究其他实现方式,再到最后的豁然开朗,真应了秀娟说的那句话:    学习的乐趣就在于前期为伊消得人憔悴的酝酿,在于中期一知半解的朦胧,在于后期柳暗花明的顿悟。    不多说了,感谢自己挺过来了,坚持下来,尝到了胜利的喜悦…

    2022年6月6日
    167
  • accept 函数_accept函数是阻塞的吗

    accept 函数_accept函数是阻塞的吗服务器要做的最普通的事情之一就是接受来自客户端的连接请求。在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数【注一】。有趣的是,通常的同步接受函数accept()的返回值是一个新的套接字,而AcceptEx()函数则需要另外一个套接字作为它的参数之一。这是因为AcceptEx()是一个重叠操作,所以你需要事先创建一个套接字(但不要绑定或连接它),并把这个套接字通过参数传给Acc

    2026年4月18日
    6
  • 智能体(AI Agent)真的就是不靠谱吗?

    智能体(AI Agent)真的就是不靠谱吗?

    2026年3月15日
    2
  • 带通滤波器幅频特性曲线图_滤波器和对讲机技术解析!「建议收藏」

    带通滤波器幅频特性曲线图_滤波器和对讲机技术解析!「建议收藏」滤波器是一种选频装置,可以使对讲机信号中特定的频率成分通过,而极大地衰减其它频率成分。但是关于滤波器是什么,估计非专业人士肯定是一头雾水,今天小编就整理了一些滤波器的知识,供大家参考:一、概述1、定义凡是可以使信号中特定的频率成分通过,而极大地衰减或抑制其他频率成分的装置或系统都称之为滤波器,相当于频率“筛子”。2、分类幅频特性如下:频率通带:能通过滤波器的频率范围。频率阻带:被滤波器抑…

    2022年5月31日
    34
  • Node.js 安装配置

    Node.js 安装配置

    2021年10月16日
    34
  • 淘宝网店装修代码使用方法大全图_淘宝店铺装修代码用什么软件做的

    淘宝网店装修代码使用方法大全图_淘宝店铺装修代码用什么软件做的公告栏大小:宽不要超过480像素,高可以随意代码:店铺公告地址”/>要求:图片一定要通过网上空间或相册放置:管理我的店铺——基本设置——公告可以预览看一下悬挂饰物代码::你图片的地址”style=”left:20px;position:relative;top:0px”/>要求:不能是自己电脑上的图片,要在网上的图片地址才行放置:管理我的店铺—

    2025年6月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号