gpt4 book ai didi

hadoop - Mapside Join 和 Reduce side join 可以有不同的 O/P

转载 作者:可可西里 更新时间:2023-11-01 16:07:57 30 4
gpt4 key购买 nike

以下代码存在于 PROD 中并且每天运行,我正在尝试对其进行优化。我看到设置 hive.auto.convert.join=FALSE;正在让它执行一个 Reduce side join,它运行 2.5 小时并产生 2324381 条记录的行数。

如果我设置 hive.auto.convert.join=TRUE;然后它执行 Map 端连接并仅运行 20 分钟并生成 5766529 条记录的行数。

我需要知道为什么行数不同,这是否正确?行数不同可以吗?我的印象是,无论发生哪个连接,O/P 或查询都应该保持不变。

在这两种情况下,源数据都保持不变,而且对于我正在更改的配置单元设置,所有其他条件都是相同的。

INSERT OVERWRITE TABLE krish
SELECT
s.svcrqst_id
s.svcrqst_lupdusr_id,
s.svcrqst_lstupd_dts as svcrqst_lupdt,
f.crsr_lupdt,
s.svcrqst_crt_dts,
s.svcrqst_asrqst_ind,
s.svcrtyp_cd,
s.svrstyp_cd,
s.asdplnsp_psuniq_id as psuniq_id,
s.svcrqst_rtnorig_in,
s.cmpltyp_cd,
s.catsrsn_cd,
s.apealvl_cd,
s.cnstnty_cd,
s.svcrqst_vwasof_dt,
f.crsr_master_claim_index,
t.svcrqct_cds,
r.sum_reason_cd,
r.sum_reason

from
table1 s
left outer join
(
select distinct
lpad(trim(i_srtp_sr_sbtyp_cd), 3, '0') as i_srtp_sr_sbtyp_cd,
lpad(trim(i_srtp_sr_typ_cd), 3, '0') as i_srtp_sr_typ_cd,
sum_reason_cd,
sum_reason
from table2
) r
on lpad(trim(s.svcrtyp_cd), 3, '0')=r.i_srtp_sr_typ_cd
and lpad(trim(s.svrstyp_cd), 3, '0')=r.i_srtp_sr_sbtyp_cd

left outer join table3 f
on trim(s.svcrqst_id)=trim(f.crsr_sr_id)

left outer join table4 t
on t.svcrqst_id=s.svcrqst_id

where
( year(s.svcrqst_lstupd_dts)=${hiveconf:YEAR} and month(s.svcrqst_lstupd_dts)=${hiveconf:MONTH} and day(s.svcrqst_lstupd_dts)=${hiveconf:DAY} )
or
( year(f.crsr_lupdt)=${hiveconf:YEAR} and month(f.crsr_lupdt)=${hiveconf:MONTH} and day(f.crsr_lupdt)=${hiveconf:DAY} )
;

最佳答案

在对我的数据进行更多研究后,我创建了所有具有相同列的分区和分桶的源表,然后重新运行我的 HQL。

这次 map side join 和 reduce side join 的行数具有相同的计数。

我认为在之前的查询中,由于数据未分区,map 端和 reduce 端连接具有不同的输出。

关于hadoop - Mapside Join 和 Reduce side join 可以有不同的 O/P,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187111/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com