Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换

news2025/1/18 11:07:22

文章目录

  • 一、Hive数据类型
    • 1.1、数值类型
    • 1.2、字符类型
    • 1.3、日期时间类型
    • 1.4、其他类型
    • 1.5、集合数据类型
      • 1.5.1、Struct举例
      • 1.5.2、Array举例
      • 1.5.3、Map举例
  • 二、数据类型转换
      • 2.1、隐式转换
      • 2.2、显示转换

本章主要讲解hive的数据类、字段类型。官网文档地址见https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

一、Hive数据类型

数据类型主要是指create table的时候表中字段的类型,如int、string、decimal等等。

create table test_user
(
    id   int  comment '主键',
    name string comment '姓名',
    score   struct<math:int,computer:int>
)
comment '测试用户表'
row format delimited fields terminated by ','
collection items terminated by '_'
lines terminated by '\n';

1.1、数值类型

Hive 数据类型Java 数据类型长度范围例子
TINYINTbyte1byte 有符号整数-128 to 12710
SMALINTshort2byte 有符号整数-32,768 to 32,76710
INTint4byte 有符号整数-2,147,483,648 to 2,147,483,64710
BIGINTlong8byte 有符号整数-9,223,372,036,854,775,808 to 9,223,372,036,854,775,80720
FLOATfloat单精度浮点数3.1415
DOUBLEdouble双精度浮点数3.1419
DECIMALBigDecimal17字节38位,存储小数10.20

1.2、字符类型

Hive的支付类型也与关系型数据库的MySQL类似。 实际使用中,String使用得最多

数据类型描述
String使用时通常用单引号(‘’)或者双引号(””)引用,Hive在String中使用c样式的转义
varchar变长字符串,最大长度为65535
char定长字符串, 最大长度255

Hive 的 STRING 类型相当于mysql数据库的 varchar 类型,该类型是一个可变的字符串,不过它不限定最多能存储多少个字符,理论上它可以存储 2GB 的字符数。

1.3、日期时间类型

Timestamp精度高,Timestamp精度为9,可以满足对时间字段的要求。 如要使用日期时间计算,可以使用interval。

Hive 数据类型Java 数据类型描述
TIMESTAMP持传统的UNIX时间戳,可选纳秒精度,精度为9
Date以YYYY-­MM-­DD格式存储年月日
intervalINTERVAL ‘1’ DAY 增加1天
INTERVAL ‘1-2’ YEAR TO MONTH 增加1年2个月

1.4、其他类型

布尔类型表示true或false。

数据类型描述
Booleantrue/false
BINARY字节数组

1.5、集合数据类型

Hive中的列支持struct、map和array集合数据类型。

数据类型描述语法示例
STRUCT和 c 语 言 中 的 struct 类 似 , 都 可 以 通过“点”符号访问元素内容。例如,如果某个列的 数 据 类 型 是 STRUCT{first STRING, lastSTRING},那么第1个元素可以通过字段.first来引用。struct(‘tom’,15) struct<name:string,age:int>
MAPMAP是一组键-值对元组集合,可以通过key来访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->‘John’和’last’->‘Doe’,那么可以通过字段名[‘last’]获取最后一个元素map<string, int>
ARRAYARRAY是由一系列具有相同数据类型的元素组成的集合,这些些素可以通过下标来访问。例如有一个ARRAY类型的变量fruits,它是由[‘apple’,‘orange’,‘mango’]组成,那么我们可以 通 过 fruits[1] 来 访 问 元 素 orange , 因 为ARRAY类型的下标是从0开始的。Array(‘John’, ‘Doe’)

ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

1.5.1、Struct举例

(1)假设有如下两条数据,为了便于理解,以JSON格式来表示它的数据结构:

[
{
	"stuid": 1,
	"stuname":'alan',
	"score":{
		"math":98,
		"computer":89
	}
},
{
	"stuid": 2,
	"stuname":'john',
	"score":{
		"math":95,
		"computer":97
	}
}
]

(2)在目录/root/data中创建本地测试文件struct.txt,保存下面的数据。

1,alan,98_89
2,john,95_97

在这里插入图片描述
(3)在Hive上创建测试表test_struct

create table test_struct
(
    stuid   int,
    stuname string,
    score   struct<math:int,computer:int>
)
    row format delimited fields terminated by ','
        collection items terminated by '_'
        lines terminated by '\n';

在这里插入图片描述
字段解释:

row format delimited fields terminated by ',' -- 列分隔符
collection items terminated by '_' -- MAP STRUCT和ARRAY的分隔符(数据分割符号)
lines terminated by '\n'; -- 行分隔符

(4)接下来,导入struct.txt中的文本数据到测试表test_struct

load data local inpath '/root/data/struct.txt' into table test_struct;

(5)访问表test_struct中的数据

select * from test_struct;

在这里插入图片描述
(6)访问结构中的数据

select stuname,score.math,score.computer from test_struct;

在这里插入图片描述

1.5.2、Array举例

(1)假设有如下两条数据,为了便于理解,以JSON格式来表示它的数据结构:

[
{
	"stuid": 1,
	"stuname":'alan',
	"hobbys":["music","sports"]
},
{
	"stuid": 2,
	"stuname":'john',
	"hobbys":["music","travel"]
}
]

(2)在目录/root/data中创建本地测试文件array.txt,保存下面的数据。

1,alan,music_sports
2,john,music_travel

在这里插入图片描述
(3)在Hive上创建测试表test_array

create table test_array
(
    stuid   int,
    stuname string,
    hobbys  array<string>
)
    row format delimited fields terminated by ','
        collection items terminated by '_'
        lines terminated by '\n';

(4)接下来,导入array.txt中的文本数据到测试表test_array

load data local inpath '/root/data/array.txt' into table test_array;

(5)访问表test_array中的数据

select * from test_array;

在这里插入图片描述
(6)访问数组中的数据

set hive.cli.print.header=true;
select stuname,hobbys[0] from test_array;

在这里插入图片描述

1.5.3、Map举例

(1)假设有如下两条数据,为了便于理解,以JSON格式来表示它的数据结构:

[
{
	"stuid": 1,
	"stuname":'alan',
	"score":{
		"math":98,
		"computer":89
	}
},
{
	"stuid": 2,
	"stuname":'john',
	"score":{
		"math":95,
		"computer":97
	}
}
]

(2)在目录/root/data中创建本地测试文件 map.txt,保存下面的数据。

1,alan,math:98_computer:89
2,john,math:95_computer:97

在这里插入图片描述

3)在Hive上创建测试表test_map

create table test_map
(
    stuid   int,
    stuname string,
    score   map<string,int>
)
    row format delimited fields terminated by ','
        collection items terminated by '_'
        map keys terminated by ':'
        lines terminated by '\n';

字段解释:

row format delimited fields terminated by ',' -- 列分隔符
collection items terminated by '_' --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ':' -- MAP 中的 key 与 value 的分隔符
lines terminated by '\n'; -- 行分隔符

(4)接下来,导入map.txt中的文本数据到测试表test_map

load data local inpath '/root/data/map.txt' into table test_map;

(5)访问表test_map中的数据

set hive.cli.print.header=true;
select * from test_map;

在这里插入图片描述
(6)访问map中的数据

select stuname,score['math'] as math,score['computer'] as computer from test_map;

在这里插入图片描述

二、数据类型转换

Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换。转换的原则是从数据范围小的类型向数据范围大的类型转换,或从数据精度低的类型向数据精度高的类型转换,以保证数据和精度不丢失。例如某表达式使用 BIGINT类型,INT 会自动转换为BIGINT 类型,但是 Hive 不会进行反向转换。例如,某表达式使用 INT 类型,BIGINT 不会自动转换为 INT 类型,它会返回错误,除非使用 CAST 操作。

2.1、隐式转换

(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成 INT,INT 可以转换成 BIGINT。

(2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。

(3)TINYINT、SMALLINT、INT 都可以转换为 FLOAT。

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

2.2、显示转换

可以使用 CAST 操作进行显示数据类型转换,例如 CAST(‘1’ AS INT)将把字符串’1’ 转换成整数 1;如果强制类型转换失败,如执行 CAST(‘X’ AS INT),表达式返回空值NULL。

select '2'+3,cast('2' as int)+1;

在这里插入图片描述









参考文章:https://blog.csdn.net/W_chuanqi/article/details/131101265

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库系统概论复习资料

数据库系统概论考试需知 一、分值分布 1、判断题&#xff08;10分&#xff09; 1分一个 2、填空题&#xff08;20分&#xff09; 2分一个 3、选择题&#xff08;20分&#xff09; 2分一个 4、分析题&#xff08;30分&#xff09; 第一题10分&#xff0c;第二题…

ubuntu安装docker及docker常用命令

docker里有三个部分 daemon 镜像 和 容器 我们需要了解的概念 容器 镜像 数据卷 文章目录 docker命令docker镜像相关命令docker容器相关命令数据卷ubuntu安装docker docker命令 #启动&#xff0c;停止&#xff0c;重启docker systemctl start docker systemctl stop docker s…

2023字节跳动软件测试工程师面试题及答案分享

相信大家都有这样一个忧虑就是面试&#xff0c;不管我们要找什么工作&#xff0c;面试都会是必不可少的&#xff0c;下面是整理出来的面试题和我的一些见解觉得不对的在评论区留言&#xff01; 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&…

JVM 对象内存布局篇

对象的实例化 创建对象有哪些方式&#xff1f; 1、new对象 最常见的方式 变形1:X的静态方法 变形2:XxxBuilder/XxxFactory的静态方法 2、Class的newlnstance0:反射的方式&#xff0c;只能调用空参的构造器&#xff0c;权限必须是public 3、Constructor的newinstance(X):反射的…

MQTT源码分析

目录 MQTT源码分析 1. MQTT客户端功能 2. 客户端软件如何实现 3. 程序分层 4. 情景分析 4.1 连接服务器 4.2 创建线程 4.3 发布消息 4.4 最复杂&#xff1a;订阅消息 MQTT源码分析 分析源码&#xff1a;mqttclient\test\emqx\test.c 参考资料&#xff1a; kawaii-mqt…

解决vue3使用iconpark控制台预警提示问题

前言 最近在项目中使用 iconpark-icon 来管理图标&#xff0c;一切都很顺利&#xff0c;引入链接后&#xff0c;图标正常显示&#xff0c;没有报错。但是控制台却发出了预警信息。 [Vue warn]: Failed to resolve component: iconpark-icon If this is a native custom eleme…

istio为什么能代替传统的SpringCloud 服务网格Istio概述

服务网格Istio概述 什么是服务网格(Service Mesh)&#xff1f;istio简介边车模式&#xff08;Sidecar&#xff09;为什么istio能代替传统SpringCloud&#xff1f;整体架构 首先奉上 istio官网 什么是服务网格(Service Mesh)&#xff1f; 服务网格详解 服务网格&#xff08;Se…

ky10 x86 一键安装wvp gb28181 pro平台

下载代码 git clone https://gitcode.net/zengliguang/ky10_x86_wvp_record_offline_install.gitfinalshell mobaxterm 修改服务器ip 查看服务器ip ip a 在脚本文件中修改服务器ip 执行安装脚本 切换到root用户 sudo su cd ky10_x86_wvp_record_offline_install/ sourc…

HarmonyOS开发(十):通知

1、通知概述 1.1、简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知使用的的常见场景&#xff1a; 显示接收到的短消息、即使消息...显示应用推送消息显示当前正在进行的事件&#xff0c…

string类:`reserve()`,`resize()`详解

string类的重要接口说明(1)&#xff1a;reserve()&#xff0c;resize() 一、reserve() 和 resize() 注意不要把 reserve(储备) 和 reverse(逆向) 搞混了&#xff01; 1.1 reserve()&#xff1a;用于为字符串预留空间&#xff08;扩容&#xff09;&#xff0c;以便后续操作可以…

urllib爬虫 应用实例(三)

目录 一、 ajax的get请求豆瓣电影第一页 二、ajax的get请求豆瓣电影前十页 三、ajax的post请求肯德基官网 一、 ajax的get请求豆瓣电影第一页 目标&#xff1a;获取豆瓣电影第一页的数据&#xff0c;并保存为json文件 设置url&#xff0c;检查 --> 网络 --> 全部 -…

如何搭建外部网关,转发请求进行调用(送源码)

像阿里云能力中台一样&#xff0c;我们输入阿里云的地址&#xff0c;阿里云内部的程序帮助我们进行转发到相应的服务去。比如说阿里云的短信服务&#xff0c;他也是集成的若干个小服务&#xff0c;我们通过阿里云的地址进行访问时。阿里云再将具体的请求推送到具体的服务去。 …

Spring-Boot---日志文件

文章目录 日志的作用自定义日志打印获得日志对象使用日志对象打印日志日志格式说明 日志级别日志级别的作用日志级别的分类日志级别的设置 日志持久化更简单的使用日志 日志的作用 发现和定位问题记录用户登录日志&#xff0c;判断用户是正常登录还是恶意登录记录系统操作日志…

uniapp实战 —— 分类导航【详解】

效果预览 组件封装 src\pages\index\components\CategoryPanel.vue <script setup lang"ts"> import type { CategoryItem } from /types/index defineProps<{list: CategoryItem[] }>() </script><template><view class"category&…

数据可视化|jupyter notebook运行pyecharts,无法正常显示“可视化图形”,怎么解决?

前言 本文是该专栏的第39篇,后面会持续分享python数据分析的干货知识,记得关注。 相信有些同学在本地使用jupyter notebook运行pyecharts的时候,在代码没有任何异常的情况下,无论是html还是notebook区域,都无法显示“可视化图形”,界面区域只有空白一片。遇到这种情况,…

el-form-item表单根据后台返回的数据项展示校验错误信息

客户要求校验不通过时把失败原因一一对应显示在相关数据项下方 &#xff08;类似form表单提示必填的效果&#xff09; 本来想从自定义rules下手 顺路看了眼官网 发现有现成的&#xff01; 诶嘛 真香 在el-form-item上加error 该值会使表单验证状态变为error 红框高亮 并显示该…

SpringBoot读取properties文字乱码问题及相关问题

问题&#xff1a;在idea的编辑器中properties文件一般用UTF-8编码&#xff0c;SpringBoot2读取解码方式默认不是UTF-8&#xff0c;当值出现中文时SpringBoot读取时出现了乱码。 解决方式1&#xff1a;在SpringBoot框架层面解决&#xff0c;在配置类注解上添加encoding属性值为…

生成任意轴线方向的圆柱体

文章目录 测试效果1. 基本内容2. 生成任意轴线方向的圆柱体2. 代码实现3. 参考目标: 目标:根据拟合的圆柱体轴线和轴上点,可视化任意轴线方向的圆柱体测试效果 1. 基本内容 在实际检测拟合圆柱体后,我们可以根据拟合误差查看拟合的效果,但是,为了更直观的查看拟合效果,…

网络基础入门---使用udp协议改进程序

目录标题 前言改进一&#xff1a;单词翻译程序准备工作transform函数的实现init_dictionary函数的实现transform函数的实现其他地方的修改测试 改进二&#xff1a;远程指令执行程序popenexecCommand函数实现测试 改进三&#xff1a;群聊程序Usr类onlineUser类adduserdelUserisO…

互联网Java工程师面试题·Spring Cloud篇

目录 1、什么是 Spring Cloud&#xff1f; 2、使用 Spring Cloud 有什么优势&#xff1f; 3、服务注册和发现是什么意思&#xff1f;Spring Cloud 如何实现&#xff1f; 4、负载平衡的意义什么&#xff1f; 5、什么是 Hystrix&#xff1f;它如何实现容错&#xff1f; 6、什么是…