Hive性能GROUP BY与MAX

时间:2018-01-30 15:46:20

标签: hive

我有一个包含partner_iddummyclicks列的表格。现在我想通过partner_id和dummy来执行简单的任务来累计点击次数。但我有额外的知识,dummy对于固定的partner_id始终是恒定的。例如,让我们采用下表data

partner_id  dummy  clicks
1           a      10
1           a      15
2           b      100

现在我想进行聚合以获得这个:

partner_id  dummy  clicks
1           a      25
2           b      100

显而易见的解决方案是

SELECT
  partner_id,
  dummy,
  SUM(clicks)
FROM
  data
GROUP BY
  partner_id,
  dummy

但是因为我知道假人对于每个partner_id都是一样的,我也可以去

SELECT
  partner_id,
  MAX(dummy) AS dummy,
  SUM(clicks)
FROM
  data
GROUP BY
  partner_id

我的问题是,如果一个选项具有明确的更好性能 我认为第二个选项比第一个选项具有更好的性能,但我确实没有找到任何资源来验证这一点。查看两个查询的阶段计划,除了分组阶段的明显差异外,它们非常相似。

1 个答案:

答案 0 :(得分:1)

1号肯定会有更好的表现。根据数据的大小,选项2将需要在聚合期间进行一些额外的处理以找到最大值(它将迭代整个组以获得最大值),考虑到列“虚拟”,您已经知道它们总是相同的“在集团层面具有相同的价值。考虑到mapreduce框架行为,选项1和2将在组中具有相同的工作量和分布,如果您将列虚拟或不添加到组中则无关紧要。