hive的存储类型_4.2数据类型

hive的存储类型_4.2数据类型了解Hive数据类型,是Hive编程的基础。使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。然而学习技术最好的方式之一就是去查看官方文档。Hive关于数据类型官网地址:Hive官网关于数据类型的介绍…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

      了解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。 
3.从Hive 0.13开始,用户可以使用DECIMAL(precision, scale) 语法在创建表时来定义Decimal数据类型的precision和scale。 如果未指定precision,则默认为10。如果未指定scale,它将默认为0(无小数位)。

decimal数值类型使用演示:

1.decimal的使用decimal(precision, scale),前面是整数部分,后面是小数部分。
整数部分如果没有定义,则默认长度为10,小数部分如果没有指定,则默认为0.
如果超出长度则会截取,如下小数部位默认长度为0,被四舍五入截取了,整数部位进1。
hive (fdm_sor)> select CAST(1234567891.523456 AS DECIMAL) from aaaa limit 1;  
1234567892

2.如果需要转换的数据长度超过decimal指定长度,则结果不会截取,直接为null值,尽管decimal最长可以存储长度为38位的小数。
如下默认整数部分长度为10,现在需要转化的数据整数长度超过10,直接整个结果为NULL
hive(fdm_sor)> select CAST(12345678910.523456 AS DECIMAL) from aaaa limit 1;
NULL

3.使用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; 
ABCDEFGHIC

2.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
1234567891


3.同理,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:34

hive (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函数会直接截取,损失数据精度甚至得到错误结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190957.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ansi编码转换器安卓版_ansi编码批量转换器

    ansi编码转换器安卓版_ansi编码批量转换器这是ansi编码批量转换器,是一款转换器支持多种文字编码格式的软件。软件简介ansi编码批量转换器是款转换器支持多种文字编码格式的软件。可以将txt编码转换成自己手机所支持的编码方式,方便于你手机看小说,让你轻松转换,小说快速观看!软件功能本工具能把字符串(包括汉字)转换成10进制或16进制的ANSI码,以空格分开,另外能把上述格式的10进制或16进制的ANSI码转换成字符串(包括汉字)。相关知识…

    2022年9月23日
    2
  • 大数据之Atlas元数据管理「建议收藏」

    大数据之Atlas元数据管理「建议收藏」背景:公司做数据仓库时,管理自己多张表时,需要使用元数据管理系统进行管理。更多java、大数据学习面试资料,请扫码关注我的公众号:

    2022年5月28日
    38
  • DOS攻击与防御_xss攻击与防御

    DOS攻击与防御_xss攻击与防御DOS攻击概念DOS:DenialofSerivce拒绝服务攻击内因:网络安全协议的安全缺陷外因:利益驱使的蓄意行为偶然的DOS攻击原理攻击原理:利用合理的请求占用过多的服务资源,使得服务超载,无法响应正常的服务请求.网络带宽文件系统的空间容开放的进程允许的连接DOS攻击方法1.耗尽计算机资源,如带宽,内存,磁盘空间,处理器时间.2.破坏配置信息,如路由信息.3…

    2022年10月1日
    3
  • 弗洛伊德算法—–最短路径算法(一)

    弗洛伊德算法—–最短路径算法(一)学习此算法的原因:昨天下午遛弯的时候,碰到闺蜜正在看算法,突然问我会不会弗洛伊德算法?我就顺道答应,然后用了半个小时的时间,学习了此算法,并用5分钟讲解给她听,在此也分享给各位需要的朋友,让你们在最短的时间内,透彻的掌握该算法。RobertW.Floyd(罗伯特弗洛伊德)1962年在“CommunicationoftheACM”上发表了该算法,同年StephenWarsha…

    2022年6月4日
    385
  • Mac命令行退出vim

    Mac命令行退出vim@Mac命令行退出vimMac退出vim按下ESC后输入:才能进入命令模式!进入之后输入:qw(保存退出)然后按2次大写Z退出q!(不保存退出)输入后回车退出新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写作体验;在创作中心设置你喜爱的代码高…

    2022年6月11日
    604
  • 特征金字塔池化

    特征金字塔池化1 特征金字塔池化如上图所示 将特征图的所有像素划分为 n nn timesnn n 个网格 并将其经过核为 n nn timesnn n 步长为 n n n n n n 的池化 可以选择最大池化或者平均池化 经过较为密集的池化 4 times4 形成 形成 形成 N timesC timesn timesn 的特征图 将其串联形成的特征图 将其串联形成的特征图 将其串联形成 C times 的格式 之后 在第 2 个步骤池化得到的特征图的基础上 取不同的 nnn 值 进行下一个池

    2025年10月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号