Hadoop Mapside联接和Reduce side联接是否可以有不同的O/P

Hadoop Mapside联接和Reduce side联接是否可以有不同的O/P,hadoop,join,hive,Hadoop,Join,Hive,下面的代码存在于PROD中并每天运行,我正在尝试对其进行优化。 我看到设置hive.auto.convert.join=FALSE;正在进行一个Reduce-side连接,该连接运行2.5小时并生成2324381条记录的行计数 如果我设置hive.auto.convert.join=TRUE;然后,它执行地图端连接,只运行20分钟,并生成5766529条记录的行计数 我需要知道为什么行数不同,这是正确的吗?行数不同可以吗?我的印象是,无论发生哪种连接,O/P或查询都应该保持不变 源数据在这两种情

下面的代码存在于PROD中并每天运行,我正在尝试对其进行优化。 我看到设置hive.auto.convert.join=FALSE;正在进行一个Reduce-side连接,该连接运行2.5小时并生成2324381条记录的行计数

如果我设置hive.auto.convert.join=TRUE;然后,它执行地图端连接,只运行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连接和reduce-side连接的行数具有相同的计数


我认为在上一个查询中,由于数据没有分区,所以map端和reduce端连接具有不同的输出

在对我的数据做了更多的研究之后,我创建了所有源表,使用相同的列进行分区和扣带,并重新运行我的HQL

这一次,map-side连接和reduce-side连接的行数具有相同的计数

我认为在上一个查询中,由于数据没有分区,所以map端和reduce端连接具有不同的输出