【问题标题】:How I can deal with data skew in SQL on hive?如何处理 Hive 上 SQL 中的数据倾斜?
【发布时间】:2019-03-01 23:09:34
【问题描述】:

我有两个表,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 分钟,太长了。

我想快速处理hive sql,用更少的时间。我不知道如何通过sql来做到这一点。

【问题讨论】:

标签: sql hadoop hive


【解决方案1】:

由于您没有在用于连接数据的列上创建任何索引,我相信您的执行计划包含对两个表的表扫描操作,这会导致您的性能不佳。

我认为您性能不佳的根本原因是缺少索引,这里有一篇很好的文章如何处理它 - Indexes & Views in hive

【讨论】:

    【解决方案2】:

    您可以改写查询:

    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;
    

    即先进行聚合,再计算结果行数。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2015-12-14
      • 2020-01-26
      • 2013-09-16
      • 2017-01-23
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多