歪斜与Hive中的分区

时间:2017-06-27 11:51:51

标签: hive hiveql partitioning hadoop-partitioning skew

在Hive中浏览Skewed tables后,我对Skewed表的数据存储方式以及分区表的处理方式感到困惑。有人可以用明显的例子清楚地说明这两个概念的位置

Skewed Tables and Partitioned Tables

重合并且它们有什么不同? 请提供示例。

1 个答案:

答案 0 :(得分:2)

Skewed和Partitioned表的目的相同,以优化查询。但是,他们这样做以及何时适用的方式有点不同。

我们假设我们正在构建像Strava这样的健身追踪器,用户数据会不断发送给我们。

  • Partitioning:按照/year=2017/month=10/day=12等日期和时间对此类数据进行分区是很正常的。这样任何基于日期和时间的过滤器都会非常快,例如。

SELECT col FROM table WHERE year=2017 AND month=10

  • Skewed table:有些用户不仅可以进行健身房锻炼,还可以进行步行计数,地理位置,骑自行车,消耗卡路里,睡眠等等。这些用户非常少,但与普通用户相比,他们发送的数据量非常大。因此,如果您想按UserId进行查询,则会很慢:

SELECT col FROM table WHERE year=2017 AND month=10 AND userid=20

但是,倾斜的桌子可以帮到这里。让我们说那些活跃用户是20, 23, 25。现在您可以创建存储数据,如:

/year=2017/month=10/day=12/userid=20
/year=2017/month=10/day=12/userid=23
/year=2017/month=10/day=12/userid=27
/year=2017/month=10/day=12/userid=others

如你所见,这些健身爱好者有自己的目录。当您在上面运行相同的查询时,这将导致快速查询(按用户ID过滤)。

还有更多内容,refer to this documentation