美文网首页
大数据之数据仓库,Hive仓库的数据类型

大数据之数据仓库,Hive仓库的数据类型

作者: 喵感数据 | 来源:发表于2020-04-11 21:01 被阅读0次

刚毕业那会用过hive,后面就很少使用hive,对hive只停留在Hql查询的操作中。最近,在建设数据仓库的过程中,频繁使用的Hive库,作为一个热爱学习技术的程序猿,当然要第一时间重拾Hive仓库了。对着镜子,看着越来越稀少的头发,趁着还有两根头发的时间,赶紧学习学习Hive,就让Hive祭奠我那逝去的头发吧。

周一,早晨刚到公司,凳子还没坐热,领导就把我叫到办公室,外面数据组的童鞋们,伸着头往里看。进了办公室,轻轻把门关上,跟领导汇报了上周的工作进度,讨论了未来工作计划,我拿着小一本本一个字、一个字的都记下来。最后,领导要求要尽快完成任务,咱们不能辜负老板的期待。

我故作深沉地从办公室走了出来,回到工位以后,数据组的童鞋们,七嘴八舌的谈论了起来。

“瞧,小明又挨训了”。我也不答,对着需求说:“需求大佬,来咱俩对对需求”。

有人大嚷到:“小明,是不是又写BUG了”。我瞪大了眼睛,“你怎么这样凭空污人清白……”。

“什么清白,我今早亲眼看到数据格式不正确”。

”我当时便涨红了脸,额上的青筋条条绽出,争辩道,“程序出BUG不能算写BUG……出BUG!

此处省略一堆废话。

严格来说的确是出了BUG。

事情是这样的,我把Oracle数据库里的数据往HIve数据仓库迁移的过程中,忘记考虑字段类型了。在Oracle中的Date日期类型数据,在Hive中,我指定的类型依然是Date。这里犯了一个很严重的错误,Hive中的Date类只支持yyyy-MM-dd类型的日期,如2020-04-10这种日期。

而Oracle数据库中的日期是2020-04-10 20:32:22这种日期类型,存到hive中少了时分秒,日期数据丢掉了时分秒,少了精度。还好我发现的及时,而且数据仓库正在建设阶段,并没有投入生产使用。不过这次严重的错误也给自己上了一课,以后不能为了省事就把Oracle数据库表结构改改直接拿去建Hive库。

HIve数据库支持的数据类型都有哪些?

工欲善其事,必先利其器。先摸清了Hive支持哪些数据类型,才能更好的开展工作。

基本类型

Hive支持的基本数据类型

咱们来看看这张表,Hive支持以上所有的基本数据类型。

1、数字类型

像这种 -2,147,483,648 ~ 2,147,483,647之间的整数类型,在使用中一般默认是int类型,除非你指定了格式100Y、100S、100L会自动转换为tinyint、smallint、bigint。

浮点数类型

浮点数默认会当作double型。

值得注意的是,Hive中的decimal类型基于Java中的BigDecimal,decimal不指定精度时默认为decimal(10,0)。

decimal这个类型很有意思,当你不指定精度的时候,他就默认精度为0,也就是小数点后0位。

比如我们选定一个数1.42,不指定精度的情况下,它在Hive中会四舍五入变成1;如果我们指定精度decimal(10,2),那么在hive中存入就是1.42。相信大家都懂什么意思了吧!decimal(10,2)表达的意思是,长10位,精度为2。

2、字符串类型

hive中的字符串类型分为String、Char、VarChar三种类型,咱们来看看他们的区别。

string:string类型可以用单引号 ' 或双引号 " 定义,就是我们常见的字符串类型

varchar :varchar类型由长度定义,范围为1-65355。如果存入的字符串长度超过了定义的长度,超出部分会被截断。尾部的空格也会作为字符串的一部分,影响字符串的比较,可变长。

char:char是固定长度的,最大长度255,它尾部的空格不影响字符串的比较,固定不可变。

其中char和varchar的区别:声明char[10]和varchar[10]两种数据类型,当存入的字符占用小于10时,声明为varchar的字符只占用10字节;而char则仍然占满20个字节空间,用空格填充。

--建一张表
create table v_char_test (
  char_test1 char(4),
  char_test2 char(5),
  string_test1 string,
  string_test2 string,
  varchar_test1 varchar(4),
  varchar_test2 varchar(6)
);
---插入数据
insert into char_a values('aa ','aa  ','aaa ','aaa    ','aaa ','aaa   ');
--查询
select 
  char_test1=char_test2, 
  string_test1=string_test2,  
  varchar_testvarchar_test1=varchar_test2 
from        
  v_char_test;

3、日期与时间戳

哇,重点终于来了,今天讲的重点就是这个,我就是没弄清Hive的Date类型才出了错误。

timestamp:timestamp表示UTC时间,可以是以秒为单位的整数;带精度的浮点数,最大精确到小数点后9位,纳秒级;timestamp格式的字符串 YYYY-MM-DD hh:mm:ss.fffffffff。

Date:Hive中的Date只支持YYYY-MM-DD格式的日期,其余写法都是错误的,如需带上时分秒,请使用timestamp。

咱们建个表来测试一下:

--数据类型为timestamp格式字段的表
create table timestamp_test (time timestamp);

--插入数据
insert into table timestamp_test values('2020-04-10 22:10:49.223');

--数据类型为date格式字段的表
create table date_test (time date);

--插入数据, 注意虽然插入数据命令没报错,但却没有将数据写入文件。
insert into table date_test values('2020-04-10 22:10:49.223');

--将日期覆盖插入的date_test ,   成功插入数据
insert overwrite table date_dual values('2020-04-10');

既然讲到这里,咱们再来看看日期跟时间戳类型的其他骚操作:

当我想获取当前的timestamp,该如何获取呢?请你这样操作,获取当前timestamp:

current_timestamp()    返回结果: timestamp 时间

有的同学说,我想获取当前的日期,又该如何呢?请看这里,获取当前日期:

current_date()   返回结果:date 日期

然后,咱们再来看看怎么把timestamp/date/string 格式化为字符串:

date_format(date/timestamp/string ts, string fmt)  返回结果:字符串  

下面来讲究Hive中的Unix时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数,例如:1530761302。

把 ”当前时间或时间字符串“ 转为 ”Unix时间戳“:

-获取当前timestamp的Unix时间戳
select unix_timestamp(current_timestamp);

--获取指定字符串的Unix时间戳
select unix_timestamp('2020-04-10 22:30:00');

把 ”Unix时间戳“ 转为 ”时间字符串“:

from_unixtime(bigint unixtime,[string format])
--unixtime:从1970-01-01 00:00:00 UTC到指定时间的秒数
--format:目标转换格式
--返回值: string

--例子
--转换成 yyyy-MM-dd HH:mm:ss timestamp时间戳
select from_unixtime(1530763124);

--转换成指定格式的字符串
select from_unixtime(1530763124, "yyyy-MM-dd");

总结:无论是什么数据库,只要掌握了其数据类型的使用方法,都会达到事半功倍的效果。明天继续分享一下,Hive复杂数据类型。

相关文章

  • 数据仓库工具Hive

    数据仓库工具Hive Hive产生背景 直接使用MapReduce处理大数据,问题: MapReduce开放难度大...

  • Hive常用的属性配置

    Hive数据仓库位置配置 默认位置/user/hive/warehouse若多数据仓库位置进行修改,则修改配置hi...

  • Hive1

    ##数据库与数据仓库 数据库:mysql,roacle,sqlserve,DB,MDB,... 数据仓库:Hive...

  • 数据仓库技术

    数据仓库基础 数据仓库的价值 数据仓库的源数据类型 数据仓库的基本架构 数据仓库的多维数据模型 数据立方体与OLA...

  • 51cto赵强HADOOP学习(十)

    什么是Hive?Hive的体系结构 数据仓库的基本概念 数据仓库(DataWarehouse,DW),是一个面向主...

  • 数仓相关文章索引(1)

    基本常识 数据仓库的源数据类型 数据仓库的多维数据模型 BI数据仓库数据分层 即席查询 算法架构 浅谈数据仓库的基...

  • hive入门

    一、什么是 Hive ? Hive 是一个基于Hadoop 文件系统之上的数据仓库架构。它为数据仓库的管理提供了许...

  • Hive数据仓库之权限管理

    Hadoop/Hive自带权限控制 延续数据仓库之Hive快速入门 - 离线&实时数仓架构[https://www...

  • hive的安装和使用

    hive介绍 hive是一款Apache旗下的数据仓库构建软件,能够读取hdfs的数据使用SQL对数据进行处理,大...

  • 099-BigData-27数据仓库

    上一篇:098-BigData-26Hive企业级调优 十、数据仓库 10.1 什么是数据仓库数据仓库,英文名称为...

网友评论

      本文标题:大数据之数据仓库,Hive仓库的数据类型

      本文链接:https://www.haomeiwen.com/subject/mfdpmhtx.html