产生问题的操作
- 使用
Lateral view outer explode
进行列转行,产生指标的数据。 - 使用
union all
将指标数据连接起来; - 将连接起来的数据插入到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操作报错,具体如下:
我的解答思路和尝试过的方法
使用 with as
将 union all
的代码包裹起来,然后在外层distinct
所有字段后就不会数据丢失了。根据其他教程所说是HIVE的元数据优化机制,丢弃了没有后续reduce操作的数据。但是,我按照教程上说的将hive.optimize.index.filter
设为false
后,没有效果。
我想要达到的结果
造成数据丢失的深层次原因是什么,有没有其他解决办法?求赐教orz。