百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

数据分析sql入门篇-hive数据类型转换函数cast详细介绍和案例分析

toyiye 2024-07-16 05:54 13 浏览 0 评论

上一篇文章「数据分析sql入门篇-hive sql常用数据类型大全」主要对hive中的数据类型(基本数据类型+复杂数据类型)做了详细的介绍,在有了数据类型的知识储备后,接下来需要对hive中的「数据类型如何转换」有一个基本的理解,这篇文章我会对数据类型范围大小、数据类型转换的前提条件、数据类型如何转换以及数据类型转换函数做一个详细的介绍,以便更好的帮助大家对hive中的数据类型有一个更加全面的学习和理解,为后面的hql学习做准备。

hive中数据类型转换可以分为隐式转换和显式转换。

所谓隐式转换是指自动转换数据类型,不需要做任何的操纵即可转换,不是所有类型的数据都可以进行隐式转换的,这跟数据类型和数据范围都有关系。而显式转换是指强制转换数据类型,是需要使用指定的数据类型转换函数cast进行操作的。

接下来,我会对隐式转换数据类型的规则和显式转换数据类型的函数cast做一个基本介绍。


一、隐式转换:

1、场景分析:

先给出一个数据场景,以便大家更好的理解什么是隐式转换具体如下:

假如hive数据库中存在一张销售订单表tb_sales_order,其中一个字段是payment_amount支付金额,数据类型是float,还有一个字段quantity销售数量,数据类型是int,当需要计算件单价时,需要用到支付金额/销售数量,这个时候int类型的数据会自动地转换为float类型,以保证两个字段的数据格式相同从而可以运算。

需要注意的是,hive中不能隐式地将一个 float类型的数据自动转换成int类型或bigint类型或者范围更小的类型数据,这时将会返回错误。


2、隐式类型转换规则:

hive中的原子数据类型(即:基础数据类型)是可以进行隐式转换的。在需要的时候,会对整数类型的数据进行隐式转换。任何整数类型都可以隐式地转换成一个范围更大的类型。

例如:当有int类型的数据和float类型的数据进行互相计算时,int类型的数据会自动地转换为float类型。


隐式类型转换规则:

1)任何整数类型都可以隐式地转换为一个范围更大的类型,例如:tinyint可以转换成int,int也可以转换成bigint;

2)所有整数类型、float和string类型都可以隐式地转换成double类型;

3)tinyint、smallint、int都可以转换为float;

4)boolean类型是不可以转换为任何其它的类型。

说明:string类型可以隐式地转换成double类型,数据需要是数字型的,例如:"12"可以转换为12.0,但是"ABC"是不可以转换为double的。


3、数据类型范围大小:

大小顺序如下:tinyint < smallint < int < bigint< float < double

当有以上所示不同数据类型的字段进行互相运算时,hive会自动地将值范围较小的数据类型转为值范围较大的数据类型,以保证两个字段的数据格式相同从而可以运算。


二、显式转换:

使用cast函数可以显式的将一种类型的数据转换成另一种类型的数据。

语法:

cast(value as type)

说明:value是需要转换数据类型的字段,type是需要转换的数据类型。


关于使用cast函数进行数据类型转换,有以下几点需要说明:

1)不是所有类型的数据都能通过cast函数进行转换的,需要符合“转换后的数据类型的存储类型值”的条件才可以进行转换,例如:"2021-06-21"字符串型可以转换成date日期型,而"abc"转换成int,则不符合条件,会返回NULL;

案例:将"abc"转换为float型的数据,会返回NULL。

select cast("abc" as float);

结果:


2)大范围的数据类型转换为小范围的数据类型时,cast函数是直接截取的,要注意由于数据精确度导致的数据误差结果,例如:将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的。


3)对于binary类型的数据,只能将binary类型的数据转换成string类型,如果是数字型的数据,可再次进行转换为整数型。

例如:比如a是一个binary,且它是一个数字型,那么你可以用下面的查询进行转换。

select (cast(cast(a as string) as double));


4)对于date类型的数据,只能在date、timestamp以及string之间进行转换,下面罗列出了详细的使用方法操作。

转换方法

说明

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


案例1:大范围的数据类型转换为小范围的数据类型时,cast函数是直接截取的。

分别将12.2、12.5和12.9转换为int类型,对比查看结果。

select cast(12.2 as int);
select cast(12.5 as int);
select cast(12.9 as int);

通过以上查询结果可知,12.2、12.5和12.9转换为int类型时,cast函数是直接截取数据的,结果都为12。


案例2:使用cast函数将字符串类型的非数字型的数据转换为数值型。

select cast("abc" as float);

结果如下:

你会发现,非数字型的字符串强制转换为数值型,系统会报错,也就是说只有字符串类型的数字型的数据才可以转换为数值型。


案例3:使用cast函数将字符串类型的数字型的数据转换为数值型。

select cast('12' as int) + 10;

结果:

使用cast将字符串类型的'12'转换为int类型时,计算结果也是int类型。

对比一下这行代码的查询结果:

select '12'+ 10;

结果:

这里我们并没有对字符串类型的'12'进行转化,hive会自动地将'12'转换为double,计算结果也是double类型。


案例4:使用cast函数将字符串类型的日期数据转换为日期型。

将字符串类型YYYY-MM-DD格式的'2021-06-22'转换为date类型,进行日期计算。

select current_date - cast('2021-06-22' as date);

结果如下:

通过以上结果可知,将字符串类型YYYY-MM-DD格式的数据转换为date类型之后,可以进行日期的计算。

对比以下代码的查询结果:

select current_date - '2021-06-22';

查询结果:


通过如上结果发现,字符串类型YYYY-MM-DD格式的数据,如果不转换为日期类型的数据,则无法跟日期类型的数据进行对比计算,系统会报错。


这篇文章主要对hive中数据类型范围大小、数据类型转换的前提条件、数据类型如何转换以及数据类型转换函数cast做一个详细的介绍,文中也给出了一系列具有对比意义的案例,以便大家更好的理解hive中的隐式转换和显式转换,通过这篇文章的学习,希望能够帮助大家对hive中的数据类型有一个更加全面的学习和理解,为后面的hive学习做准备。

如果你正在学习hive,可以收藏起来以备不时之需,欢迎小伙伴们留言,一起讨论,共同进步。


寄语:

我爱生活,喜欢记录生活中的点滴;

我爱向日葵,喜欢看着她朝着太阳微笑的样子,甚是可爱温暖。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码