Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换
文章目录
- 一、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、显示转换
- 三、字段类型的使用
- 3.1、DECIMAL(precision,scale)
本章主要讲解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 数据类型 | 长度 | 范围 | 例子 |
|---|---|---|---|---|
| TINYINT | byte | 1byte 有符号整数 | -128 to 127 | 10 |
| SMALINT | short | 2byte 有符号整数 | -32,768 to 32,767 | 10 |
| INT | int | 4byte 有符号整数 | -2,147,483,648 to 2,147,483,647 | 10 |
| BIGINT | long | 8byte 有符号整数 | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 20 |
| FLOAT | float | 单精度浮点数 | 3.1415 | |
| DOUBLE | double | 双精度浮点数 | 3.1419 | |
| DECIMAL | BigDecimal | 17字节 | 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格式存储年月日 | |
| interval | INTERVAL ‘1’ DAY 增加1天 INTERVAL ‘1-2’ YEAR TO MONTH 增加1年2个月 |
1.4、其他类型
布尔类型表示true或false。
| 数据类型 | 描述 |
|---|---|
| Boolean | true/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> |
| MAP | MAP是一组键-值对元组集合,可以通过key来访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->‘John’和’last’->‘Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map<string, int> |
| ARRAY | ARRAY是由一系列具有相同数据类型的元素组成的集合,这些些素可以通过下标来访问。例如有一个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;

三、字段类型的使用
3.1、DECIMAL(precision,scale)
Hive中的DECIMAL类型基于Java的BigDecimal,它用于在Java中表示不可变的任意精度十进制数。所有常规的数字操作(例如+、-、*、/)和相关的UDF(例如Floor、Ceil、Round等)都处理十进制类型。你可以像处理其他数值类型一样,将十进制类型转换为十进制类型或从十进制类型转换。decimal类型的持久性格式支持科学和非科学记数法。因此,无论数据集是否包含4.004E+3(科学计数法)或4004(非科学计数法)或两者的组合,DECIMAL都可以用于它。
从Hive 0.13开始,用户可以在使用DECIMAL(precision,scale)语法创建DECIMAL数据类型的表时指定scale和precision。 如果未指定小数位数,则默认为0(无小数位数)。如果未指定精度,则默认为10。
CREATE TABLE foo (a DECIMAL, -- Defaults to decimal(10,0)b DECIMAL(9, 7)
)
DECIMAL(precision,scale)说明:
precision-精度: 整数+scale的长度(即整数部分的长度最大不能超过precision-scale位)
scale-小数位: 小数部分的长度(若小数点后的长度小于scale则会自动补齐到scale位;若小数点后面的长度大于scale位则会截取scale位截取时会四舍五入)
参考文章:https://blog.csdn.net/W_chuanqi/article/details/131101265
相关文章:
Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换
文章目录 一、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、显示转换 三、字段类型的使用3.1、DECIMAL(precision,scale) 本章主要…...
在Spring Cloud中使用组件Ribbon和Feign,并分别创建子模块注册到Eureka中去
ok,在上篇文章中我们讲了在Spring cloud中使用Zuul网关,这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。 题外话,本篇博客就是配置子模块,或者说是微服务,然后将微服务正式启动之前…...
(JAVA)-缓冲流
缓冲流能高效的读取数据 缓冲流底层自带了8192的缓冲区提高性能,他在原有的流上进行了包装,加上了缓冲效果 原理: 读入时首先会将内存中缓冲区大小的数据读入缓冲区中,接着下次读取直接从缓冲区中读取数据,当缓冲区…...
Autosar UDS-CAN诊断开发02-1(CAN诊断帧格式类型详解、CANFD诊断帧格式类型详解、15765-2(CANTP层)的意义)
目录 前言 CANTP层(15765-2协议)存在的意义 CANTP层(15765-2协议)帧类型详细解读(普通CAN格式) 四种诊断报文类型 单帧SingleFrame(SF) 首帧:FirstFrame(FF) 流控帧:FlowCont…...
swing快速入门(三)
解答一下上一篇关于留下的关于布局管理器的疑问 上一篇 几种常见的布局管理器 看不懂?看不懂没关系,这篇是概念篇,大概了解一下就行~ 1.FlowLayout(流式布局):按照从左到右、从上到下的顺序依次排列组件。…...
Swagger PHP Thinkphp 接口文档
安装 1. 安装依赖 composer require zircote/swagger-php 2. 下载Swagger UI git clone https://github.com/swagger-api/swagger-ui.git 3. 复制下载好的Swagger UI 中的dist目录到public目录中,修改目录名称 cp -rf swagger-ui/dist /home/htdocs/public/ m…...
12.9每日一题(备战蓝桥杯循环结构)
12.9每日一题(备战蓝桥杯循环结构) 题目 2165: 求平均年龄题目描述输入输出样例输入样例输出来源/分类 题解 2165: 求平均年龄题目 2166: 均值题目描述输入输出样例输入样例输出来源/分类 题解 2166: 均值题目 2167: 求整数的和与均值题目描述输入输出样…...
与时代共进退
还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天࿰…...
Python 云服务器应用,Https,定时重启
Python 云服务器应用,Https,定时重启 环境搭建Python模块模块导入生成Flask实例GET处理启动服务器打开网页验证 GET接入证书 支持https申请证书下载证书保留 xxx.crt 和 xxx.key文件就可以了 copy到python项目目录ssl_context 配置 宝塔面板操作在www目录下新建python工作目录在…...
pytorch 笔记:dist 和 cdist
1 dist 1.1 基本使用方法 torch.dist(input, other, p2) 计算两个Tensor之间的p-范数 1.2 主要参数 input输入张量other另一个输入张量p范数 input 和 other的形状需要是可广播的 1.3 举例 import torchxtorch.randn(4) x #tensor([ 1.2698, -0.1209, 0.0462, -1.3271…...
Java的List中的各种浅拷贝和深拷贝问题
先来看一组代码 public class Temp{public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(1);list.add(2);list.add(3);List<Integer> temp list;list.add(4);System.out.println(list.toString());System.out.print…...
20231207_最新已测_Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066
以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…...
前端知识笔记(二十六)———React如何像Vue一样将css和js写在同一文件
如果想在React中想要像Vue一样把css和js写到一个文件中,可以使用CSS-in-JS。 使用CSS-in-JS 下载 npm i styled-components使用 就像写scss一样,不过需要声明元素的类型 基本语法及展示如下 import styled from "styled-components"expor…...
Photoshop Circular Text
Ctrl N 新增 现学现卖...
深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用
文章目录 1. 引言2. PathVariable:处理路径变量2.1 简介2.2 使用示例 3. RequestParam:处理请求参数3.1 简介3.2 使用示例 4. RequestBody:处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…...
Qt Location中加载地图对象
在Qt Location中加载地图对象,你可以按照以下步骤进行操作: 1,首先,确保你已经安装了Qt Location模块,并在项目中包含了相应的头文件。在项目文件(.pro)中添加以下行: QT locatio…...
4-Docker命令之docker ps
1.docker ps介绍 docker ps命令是用来列出容器的相关信息 2.docker ps用法 docker ps [参数] [rootcentos79 ~]# docker ps --helpUsage: docker ps [OPTIONS]List containersAliases:docker container ls, docker container list, docker container ps, docker psOptions…...
你在地铁上修过bug吗?
作为技术人员,有没有遇到下班路上收到老板电话,系统故障,然后地铁上掏出电脑,修bug的场景。自己负责的业务线上出现问题,负责人心里是很慌的,在这种心理状态下做事很容易二次犯错,造成更大的问题…...
CPU、MCU、MPU、DSP、FPGA各是什么?有什么区别?
1、CPU 中央处理器,简称 CPU(Central Processing Unit),中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。 电子计算机三大核心部件就是CPU…...
SpringBoot之logback 在Linux系统上启动的时候,设置日志按日期分割并设置指定时间自动清除日志
一、在src/main/resources/下创建logback-spring.xml文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 日志存放路径 --><property name"log.path" value"/home/xmmc/logs" /><!-- 日志…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
