永州网,内容丰富有趣,生活中的好帮手!
永州网 > 知识 > 正文

大数据之数据仓库,使用Hive仓库遇到的哪些事

时间:2021-07-13 10:09:15

相关推荐

刚毕业那会用过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个字节空间,用空格填充。

--建一张表createtablev_char_test(char_test1char(4),char_test2char(5),string_test1string,string_test2string,varchar_test1varchar(4),varchar_test2varchar(6));--------------------------插入数据-------------insertintochar_avalues("aa","aa","aaa","aaa","aaa","aaa");-------------查询-------------selectchar_test1=char_test2,string_test1=string_test2,varchar_testvarchar_test1=varchar_test2fromv_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格式字段的表createtabletimestamp_test(timetimestamp);--插入数据insertintotabletimestamp_testvalues("2020-04-1022:10:49.223");--数据类型为date格式字段的表createtabledate_test(timedate);--插入数据,注意虽然插入数据命令没报错,但却没有将数据写入文件。insertintotabledate_testvalues("2020-04-1022:10:49.223");--将日期覆盖插入的date_test,成功插入数据insertoverwritetabledate_dualvalues("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时间戳selectunix_timestamp(current_timestamp);--获取指定字符串的Unix时间戳selectunix_timestamp("2020-04-1022:30:00");

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

from_unixtime(bigintunixtime,[stringformat])--unixtime:从1970-01-01 00:00:00 UTC到指定时间的秒数--format:目标转换格式--返回值:string--例子--转换成yyyy-MM-ddHH:mm:sstimestamp时间戳selectfrom_unixtime(1530763124);--转换成指定格式的字符串selectfrom_unixtime(1530763124,"yyyy-MM-dd");

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

往期回顾


||大数据,阿里大数据实践,数据仓库一些概念

||大数据 Hive 类Sql语法大全,Hql Join语法详解

||Hive Sql最常用的时间处理类,都在这里了

收集不易,本文《大数据之数据仓库,使用Hive仓库遇到的哪些事》知识如果对你有帮助,请点赞收藏并留下你的评论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
理解供应商入库:意义与作用解析

理解供应商入库:意义与作用解析

...和采购等多个环节的协同配合。当供应商的货物到达企业仓库后,需要进行接收、验货、入账等一系列流程,最终将货物存放在指定的库房中,以备生产或销售使用。供应商入库是物流管理中至关重要的一环,影响着企业的供应...

2024-01-30

购买MES前必须问自己的6个关键问题

购买MES前必须问自己的6个关键问题

...来满足将来业务和行业的变化。4.部署速度如何?在您的仓库中实施一个全新的系统非常重要。老实说,这是一个大项目,将需要一些时间。以正确的方式进行操作意味着将正确的时间投入到部署中。考虑一下您的需求,您要自...

2024-02-20

新媒体技术应用下的大数据思维拓展:机遇与挑战

新媒体技术应用下的大数据思维拓展:机遇与挑战

...在各领域进行采集,也可以在各个层次深度上进行探索,使用这些全面有效的数据,完整系统的对现实规律的探索和发现。三、利用新媒体,开拓大数据思维开辟出来的新途径互联网本身在全球范围内发展迅猛,目前众多发达国...

2024-01-22

构建企业数据化运营体系的指南

构建企业数据化运营体系的指南

...部分。通过整合各个部门和业务线的数据资源,构建数据仓库和数据分析平台,企业可以实现数据的全面管理和高效利用。企业数据化运营体系的建立不仅可以帮助企业对市场趋势、客户需求和竞争对手进行深入分析,还可以提...

2024-03-04

以色列医疗创新:小创意 大健康的专访报道

以色列医疗创新:小创意 大健康的专访报道

...额度最高可达公司所需资金的95%。 虽然政府会对贷款的使用进行审单,但如果创业公司最终破产,这笔钱甚至可以不还。实际上,创业公司还回来的贷款,以色列政府也不会就此“收进口袋”,而是用于资助更多的创业公司。...

2024-02-04