相信在工作中,很多小伙伴会遇到脚本有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 更加安全,即使脚本因为各种问题出错导致之前数据写入目标表有瑕疵,但后面只要跑成功,可以把瑕疵数据覆盖,总是可以呈现一份完美的数据在你眼前。
当然,两者学会 搭配使用,就无敌了!!
版权归原作者 不被定义喵 所有, 如有侵权,请联系我们删除。