IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> HIve系列六:数据类型转换 -> 正文阅读

[大数据]HIve系列六:数据类型转换

Hive系列之六:数据类型转换

Hive系列文章

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

hive系列之一:Hive搭建

hive系列之二:Hive基础知识

Hive系列之三:开窗函数详解

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

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
    

数据类型转换表

booleantinyintsmallintintbigintfloatdoubledecimalstringvarchartimestampdatebinary
booleantruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
tinyintfalsetruetruetruetruetruetruetruetruetruefalsefalsefalse
smallintfalsefalsetruetruetruetruetruetruetruetruefalsefalsefalse
intfalsefalsefalsetruetruetruetruetruetruetruefalsefalsefalse
bigintfalsefalsefalsefalsetruetruetruetruetruetruefalsefalsefalse
floatfalsefalsefalsefalsefalsetruetruetruetruetruefalsefalsefalse
doublefalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
decimalfalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalsefalse
stringfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
varcharfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
timestampfalsefalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalse
datefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsetruefalse
binaryfalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetrue

日期类型转换说明

有效的转换结果
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('20210825' 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>
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:10:28  更:2021-08-26 12:12:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:46:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码