在这个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;
可能是地图任务花费太多时间
不要计算行数,然后放弃其中的大部分,而是尝试分组并重新调整 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 来抑制结果中两个表之间不匹配的任何行。