Hive 数据量增加时左连接中未连接 da

问题描述 投票:0回答:1

在这个hive sql中,当table1的数据量很大时,t2.c会丢失,但是应该join,在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;

可能是地图任务花费太多时间

join hive mapreduce
1个回答
0
投票

不要计算行数,然后放弃其中的大部分,而是尝试分组并重新调整 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,因此如果 table2 中不存在 table1.id 值,则列 c 将为 NULL。您可以使用 INNER JOIN 来抑制结果中两个表之间不匹配的任何行。

© www.soinside.com 2019 - 2024. All rights reserved.