当Hive中的数据量增加时,左连接中缺少连接da

mjqavswn  于 8个月前  发布在  Hive
关注(0)|答案(1)|浏览(76)

在这个hive sql中,当table1中的数据量很大时,t2.c会丢失,但它应该被连接,如何在mapreduce级别解释这一点?

SELECT
  t1.a,
  t1.b,
  t2.c
FROM
  table1 t1
LEFT JOIN
  ( 
    select
        t02.id,
        t02.c
    from 
        (
            SELECT
                id,
                c,
                row_number() over (partition by id order by c) rk
            FROM
                table2
        )t02
    where t02.rk = 1 
  ) t2
ON
  t1.id = t2.id;

可能是Map任务花费太多时间

66bbxpm5

66bbxpm51#

不要计算行数然后放弃其中的大部分,而是尝试分组并重新调整c的最小值。

SELECT
      t1.a
    , t1.b
    , t2.c
FROM table1 t1
LEFT JOIN (
    SELECT
          t02.id
        , t02.c
    FROM (
        SELECT
              id
            , MIN(c) as c
        FROM table2
        GROUP BY
              id
        ) t02
    ) t2 ON t1.id = t2.id;

还要注意,您选择了使用LEFT JOIN,因此如果table1.id表2中没有www.example.com值,那么列c将为NULL。您可以使用INNER JOIN来隐藏结果中两个表之间不匹配的任何行。

相关问题