Hive数据类型和使用注意事项详解
了解Hive数据类型 ,是Hive编程的基础。使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。然而学习技术最好的方式之一就是去查看官方文档。
Hive关于数据类型官网地址:Hive官网关于数据类型的介绍
一.Hive数据类型与使用
下面介绍的是基于hive v0.80版本之后的hive支持的数据类型,同关系型数据库一样,hive支持多种不同长度的整型和浮点型数据,同时支持布尔型,不定长度的字符串型(注意,这里的int,float,double等底层实现原理和java中底层实现一样,因为hive基于java开发的,底层是对java接口的实现,所以也会规定数据类型的内存占用空间。)
1. 数值型(标注红色为常用的)
在Hive里默认情况下,整数型为INT型,当数字大于INT型的范围时,会自动解释执行为BIGINT,或者直接用后缀进行说明100Y,100S,100L(对应为tinyint,smallint,bigint)
类型 | 支持范围 |
---|---|
TINYINT | 1-byte signed integer, from -128 to 127 ,范围太小,基本不用 |
SMALLINT | 2-byte signed integer, from -32,768 to 32,767 基本也不用。 |
INT/INTEGER | 4-byte signed integer, from -2,147,483,648 to 2,147,483,647 ,INTERGER是hive2.20中才开始有的,一般不用 |
BIGINT | 8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 为int的补充使用 |
FLOAT | 4-byte single precision floating point number,常用单精度浮点数3.14159 |
DOUBLE | 8-byte double precision floating point number 双精度浮点,存储更大。3.114159 |
DECIMAL |
1.hive.0.13.0才开始使用,Hive的小数型是基于Java BigDecimal做的, BigDecimal在java中用于表示任意精度的小数类型。所有常规数字运算(例如+, - ,*,/)和相关的UDFs(例如Floor,Ceil,Round等等)都使用和支持Decimal。 2.可以将Decimal和其他数值型互相转换,且Decimal支持科学计数法和非科学计数法。因此,无论您的数据集是否包含如4.004E + 3(科学记数法)或4004(非科学记数法)或两者的组合的数据,可以使用Decimal。 |
decimal数值类型使用演示:
1.decimal的使用decimal(precision, scale),前面是整数部分,后面是小数部分。
整数部分如果没有定义,则默认长度为10,小数部分如果没有指定,则默认为0.
如果超出长度则会截取,如下小数部位默认长度为0,被四舍五入截取了,整数部位进1。
hive (fdm_sor)> select CAST(1234567891.523456 AS DECIMAL) from aaaa limit 1;
12345678922.如果需要转换的数据长度超过decimal指定长度,则结果不会截取,直接为null值,尽管decimal最长可以存储长度为38位的小数。
如下默认整数部分长度为10,现在需要转化的数据整数长度超过10,直接整个结果为NULL
hive(fdm_sor)> select CAST(12345678910.523456 AS DECIMAL) from aaaa limit 1;
NULL3.使用decimal将其他类型的数据转换成decimal,指定长度,超出部分四舍五入。
hive (fdm_sor)> select CAST(123456789.1234567 AS DECIMAL(20,5)) from aaaa limit 1;
123456789.12346
2.字符型的数据类型(标注红色为常用的)
string与varchar,char的区别和联系
1.varchar固定长度,使用时要指定长度.所以转换的时候有可能超出指定长度后,数据丢失,这点不如string
hive (fdm_sor)> select CAST("ABCDEFGHICD" AS VARCHAR(10)) from aaaa limit 1;
ABCDEFGHIC2.varchar建表时,需要指定长度,否则报错。长度如果指定小了,数据插入会直接被截取长度。如下所示:
hive (fdm_sor)> create table tmp_varchar(id varchar(10)) > ;hive (fdm_sor)> insert overwrite table tmp_varchar > select "123456789122" from aaaa;
tmp_varchar.id
1234567891
1234567891
1234567891
12345678913.同理,char的使用也需要指定长度,只是char的长度比varchar小多了,这个两者的使用有点类似数据库
CREATE TABLE foo (bar CHAR(10))4.一般来说能用string类型的尽量使用string类型。
3.日期型数据类型
类型 | 使用说明 |
---|---|
TIMESTAMP | 1.始于Hive 0.8.0。用来表示UTC时间(时间标准时间)。提供了用于时区转换的便捷UDFs(to_utc_timestamp,from_utc_timestamp)。2. 所有现有的日期时间UDFs(月,日,年,小时等)都使用TIMESTAMP数据类型。其次TIMESTAP支持整型,浮点型,字符串型的数据。具体使用后面介绍实际开发中使用的也不是特别多。 |
DATE |
始于Hive 0.12.0 DATE值描述特定的年/月/日,格式为YYYY-MM-DD。 例如,DATE’2013-01-01’。 日期类型没有时间组件。 Date类型支持的值范围是0000-01-01到9999-12-31,这取决于Java Date类型的原始支持。 Date types只能在Date, Timestamp, or String types之间转换。 |
INTERVAL | 始于Hive 1.2.0,实际开发中不怎么用。 |
---1.使用timestamp创建日期类型的字段,可以存储浮点,整型,字符串类型的时间数据
create table fdm_sor.tmp_aaaaa(
a int,
b bigint,
c timestamp
)
--2.测试数据
hive (fdm_sor)> insert overwrite table fdm_sor.tmp_aaaaa --存放字符串型时间> select 1,2,"2019-05-22 21:23:34" from fdm_sor.tmp_aaaaa limit 3;
hive (fdm_sor)> select * from fdm_sor.tmp_aaaaa;
OK
1 2 2019-05-22 21:23:34
1 2 2019-05-22 21:23:34hive (fdm_sor)> insert overwrite table fdm_sor.tmp_aaaaa ---存放数值型数据> select 3,4,12334324 from fdm_sor.tmp_aaaaa limit 2;
hive (fdm_sor)> select * from fdm_sor.tmp_aaaaa;
OK
3 4 1970-01-01 11:25:34.324
3 4 1970-01-01 11:25:34.324
4.其他数据类型
- BOOLEAN类型:TRUE or FALSE
- BINARY类型:字节数组,类似数据库的varbinary。
5复合数据类型,不常用
arrays | ARRAY(data_type) |
maps | MAP(primitive_type, data_type) |
structs | STRUCTcol_name : data_type [COMMENT col_comment], …) |
union | UNIONTYPE(data_type, data_type, …) |
二.Hive不同数据类型之间的转换
1.同数据类型之间的转换
hive底层是java实现开发的,hive的数据类型很多也跟java保持一致,所以对于同类型的数据类型进行转换时也遵循java的自动“向上转型”规则,即低类型的数据在和高类型的数据进行逻辑运算时,会隐式的自动转换成高类型的数据类型。然后再进行计算。比如1和1.23比较,会自动将1转换成1.0进行计算比较。
2.不同数据类型的转换
hive中不同数据类型的数据再进行比较运算时,需要用cast函数进行手动转换。
cast函数使用:cast(valule as type),value是需要被转换的数据, AS是固定关键字,type是需要转换的类型
>select
cast("1223" as double),
cast("456.23" as int),
cast("1.99" as int),
cast("abc" as int)
from aaaa;
>1223.0, 456, 1, NULL
注意:如上结果显示,cast的转换功能也不是万能的,必须是“存储的类型值”符合转换条件才能进行转换。否则是NULL值的结果。比如“abc”转换成double,很明显abc不是数值,所以转换失败,结果时NULL值。此外,如果使用cast将高类型的数据转换成低类型的数据,cast函数会直接截取,损失数据精度甚至得到错误结果。
Hive数据类型和使用注意事项详解相关推荐
- Hive Create Table和Load DATA详解
Hive Create Table和Load DATA详解 一.Hive Create Table详细讲解 二.LOAD DATA 测试使用 三.内部表和外部表区别 Hive在使用创建表的时候,有有一 ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- pythontuple数据类型_Python数据类型之Tuple元组实例详解
本文实例讲述了Python数据类型之Tuple元组.分享给大家供大家参考,具体如下: tuple元组 1.概述 本质上是一种有序的集合,和列表非常的相似,列表使用[]表示,元组使用()表示. 特点:一 ...
- Redis从精通到入门——数据类型Zset实现源码详解
Redis数据类型之Zset详解 Zset简介 Zset常用操作 应用场景 Zset实现 源码阅读 Zset-ziplist实现 图解Zset-ziplist Zset-字典(dict) + 跳表(z ...
- c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习
C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...
- python中列表数据类型_Python数据类型之List列表实例详解
本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...
- 光纤收发器连接不同端口的注意事项详解
光纤收发器在传输产品类,可以说是使用最多.其作用也是不言而喻.光纤收发器有多种不同的分类,而实际使用中大多注意的是按光纤接头不同而区分的类别:SC接头光纤收发器和FC以及FST接头光纤收发器.今天,飞 ...
- SFP光模块基本概念及使用注意事项详解
光模块(optical module)由光电子器件.功能电路和光接口等组成,光电子器件包括发射和接收两部分.简单的说,光模块的作用就是光电转换,发送端把电信号转换成光信号,通过光纤传送后,接收端再把光 ...
最新文章
- pairplot 中参数hue的作用就是在图像中将输出的散点图按照hue指定的特征或标签的类别的颜色种类进行区分
- 基于BCH的SLP代币超过1000种,探秘SLP的内部生态
- 从Windows上用SSH链接接入Ubuntu
- git 删除本地仓库中的分支_git常用命令行 新建分支 删除分支 提交
- 我的世界中国版服务器无限夜视,我的世界中国版怎么无限夜视_我的世界夜视药水怎么合成_我的世界怎么永久夜视...
- 有了 Git 这个操作,我再也不怕代码混乱了!
- 夏梦竹谈Hive vs. HBase的区别
- java复习即基础知识点 思维导图
- t3网络计算机浏览卡死,用友T3软件营改增界面关不了,电脑死机,总账用不了怎么办?...
- kotori和糖果(OEIS)
- 软路由ros(MIKROTIK)安装教程:[11]端口映射
- 绿盟 java 面试_绿盟科技校园招聘面试经验|面试问题(共52条)- 职业圈
- 《加了pencil的ipad使用体验,想入手的看过来》
- 信息加密技术——对称密码体制
- 测试测量 | 【一】如何实现生产过程中的自动化测试?——成功的自动测试系统的目标及面临的问题
- 看图说话之二叉树的前序,中序,后序,层次遍历方式
- RT-Preempt笔记
- 动力电池用复合相变材料:国内外导热和储能性能测试中存在的问题
- Resetting first dirty offset of __consumer_offsets
- 禁用服务器网络协议怎么设置,如何在Windows操作系统中启用和禁用DHCP?
热门文章
- 读出test.txt文件的内容,输出最高分和最低分及相应的学号和姓名
- 根据已知txt文件,将文件夹中的文件进行分类
- 线下失守、高端难攻,vivo 2020开年太难
- 苏宁计算机笔试,苏宁笔试经验笔试写作
- 计算机网络Part2
- python requests max_retries 设置最大重试次数
- Rennen dein Hund davon das den.
- Dubbo SPI-Wrapper
- web前端期末大作业——基于html+css+javascript学生宿舍管理系统网站
- 马斯克收购推特股票1个多月,特斯拉股价暴跌30%