HIVE:union all 之后数据丢失

产生问题的操作

  1. 使用Lateral view outer explode 进行列转行,产生指标的数据。
  2. 使用union all 将指标数据连接起来;
  3. 将连接起来的数据插入到ORC表中

产生问题的相关代码

 create table if not exists tmp_dm.tmp1
 stored as orc
 as 
 select ...
 from tmp2
 lateral view outer explode(
  map(....)
 ) as key, value
 union all 
 select ...
 from tmp2
 lateral view outer explode(
  map(....)
 ) as key, value

脚本运行时使用的参数

set hive.execution.engine=tez;
set hive.auto.convert.join=false;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.merge.tezfiles=true; 
set hive.exec.max.dynamic.partitions=50000;
set hive.exec.max.dynamic.partitions.pernode=10000;
set hive.optimize.index.filter = false;

报错

TEZ的管理UI显示,有个DAG任务中的reduce操作报错,具体如下:

img

我的解答思路和尝试过的方法

使用 with asunion all的代码包裹起来,然后在外层distinct所有字段后就不会数据丢失了。根据其他教程所说是HIVE的元数据优化机制,丢弃了没有后续reduce操作的数据。但是,我按照教程上说的将hive.optimize.index.filter设为false后,没有效果。

我想要达到的结果

造成数据丢失的深层次原因是什么,有没有其他解决办法?求赐教orz。

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。