hive 之 insert into 和 insert overwrite 的区别和用法(实战)

avatar
作者
猴君
阅读量:3

相信在工作中,很多小伙伴会遇到脚本有insert into 和 insert overwrite 的内容,接下来咱具体说说,他们有什么不一样的地方,为什么要这么用???

------------------------------------------------------------------------------------------

0,insert into 和 insert overwrite 的含义

insert into :是把数据追加写入一张表里面,可以N次追加;

insert overwrite : 是把本次数据覆盖目标表里原先的数据(不管它原本有没有!),本质是先把目标表的数据清空 truncate,然后对其 insert into 写入数据。

1, insert into 和 insert overwrite 的相同点

相同点,他们都可以对目标表写入数据。

虽然说 insert into 和 insert overwrite ,看着似乎差不多。

但是在工作中,用错可能会酿成大错,让你一世英名尽毁于你手。

2, insert into 和 insert overwrite 不同点

不同点在于, insert into 是对于目标表追加数据的,对的,是追加!!!

                   insert overwrite 会对目标表数据进行覆盖,对的,是覆盖!!!

先来看看工作中都会咋用到:

3,insert into 和 insert overwrite 的实战

3.1,开发脚本前,先设置各种参数,以提高mapreduce计算的效率。

3.2,创建临时表,顺便存储所需要的一些数据。

3.3,如果还有别的业务,也一块把数据(追加)写入,用insert into。

3.4,最终把囊括所有业务数据的数据集(临时表的数据),去(insert overwrite)覆盖目标表。

4,实战问题:

为什么不能把多段业务数据,分批次(追加 insert into)写入目标表呢?

不一样的效果嘛?

emmmmm说来话长。。。。。。。。。。。。。。。。。。。。。

目标层的表,每天都会进行跑数,很多的目标表都是带分区的,每天跑批的数据写入当天的分区。

4.1,如果用 insert  into 写入目标表,万一该脚本在生产上跑数报错了(原因很多,比如,生产资源特别紧张,脚本一直卡那半天也没有继续跑下去,会中止跑数,报错),那么可能数据写入一半,就中止了。然后yarn又再次发起命令重新调起该脚本重新执行跑数,对目标表又再次写入(追加)数据了!!!

那请问,这数据全嘛?是下游想要的嘛?又能用嘛?数据重复,不占存储不烧钱嘛?该死。

4.2,那如果换成 insert overwrite ,遇到上述各种问题导致跑数失败,没关系,不要紧。再重跑,insert overwrite 会把之前的瑕疵数据覆盖掉(就是先删除,再写入数据),就可以完美解决了。

5,总结 insert into 和 insert overwrite 的优缺点

========优缺点:========

insert  into 更加便捷,如果说脚本逻辑过于复杂,MR计算难度过大,它可以完美解决,把复杂变为简单,提高计算效率。

再者,如果要写入的数据量太大,资源内存有限一次性加载不出来这么多数据(一般银行以1亿条数据为准),只能分批次写入目标表!

insert overwrite 更加安全,即使脚本因为各种问题出错导致之前数据写入目标表有瑕疵,但后面只要跑成功,可以把瑕疵数据覆盖,总是可以呈现一份完美的数据在你眼前。

当然,两者学会 搭配使用,就无敌了!!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!