两个大桌加入缓慢

时间:2017-06-08 09:11:57

标签: sql hive

这是一个简单的选择查询:

SELECT *
  from (select * from ods_rfx_prod where dt = '2017-06-07') p
  left join (select * from ods_rfx_prod_ext where dt = '2017-06-07') pt
    on p.prod_id = pt.prod_id

两个表(ods_rfx_prod,ods_rfx_prod_ext)全部由'dt'分区并存储为RCFile。

表p包含3000w列,表pt包含3500w列。 p.prod_idpt.prod_id没有空和空白记录。

它运行近40分钟~50分钟。 我不知道如何优化它。

1 个答案:

答案 0 :(得分:0)

您可以尝试许多不同的组合来检查性能是否会提高。

1)当你有where条件时,检查列是否已编入索引

2)由于它是日期列,您可以在其上创建分区

3)当您加入productID时,您可以尝试对productID上的数据进行排序,然后应用联接

4)您还可以尝试通过散列productID来创建存储桶,以便查询可以利用地图侧连接