我有两个表,netpack_busstop表有100,000,000,ic_card_trade的另一个表有100,000。我的查询SQL是这样的:
SELECT
count(*)
FROM
ic_card_trade tmpic
LEFT JOIN netpack_busstop tmpnp
ON tmpic.line_no = tmpnp.line_no
AND tmpic.bus_no = tmpnp.bus_no
我在使用hadoop上运行此作业的时间超过40分钟,时间太长了。
我想快速处理配置单元sql,用更少的时间。我不知道如何通过sql来实现。
答案 0 :(得分:0)
由于您尚未在用于连接数据的列上创建任何索引,因此我认为您的执行计划包含对两个表的表扫描操作,这会降低性能。
我认为导致性能不佳的根本原因是缺少索引,这是一篇很好的文章-Indexes & Views in hive。
答案 1 :(得分:0)
您可以重新查询:
select sum(ic.cnt * coalesce(nb.cnt, 1))
from (select line_no, bus_no, count(*) as cnt
from ic_card_trade ic
group by line_no, bus_no
) ic left join
(select line_no, bus_no, count(*) as cnt
from netpack_busstop nb
group by line_no, bus_no
) nb
on ic.line_no = nb.line_no and
ic.bus_no = nb.bus_no;
也就是说,先进行汇总 ,然后计算生成的行数。