Hive中的Skew和Partition的区别

3

在学习Hive中偏斜表后,我对于偏斜表和分区表存储方式及处理方式的不同感到困惑。请详细说明这两个概念的异同,并提供相应示例。

偏斜表和分区表

它们的共同点以及区别是什么?请提供实例。

1个回答

3
Skewed表和Partitioned表的目的相同,都是为了优化查询。但是它们的实现方式和适用条件有所不同。
假设我们正在构建一个类似于Strava的健身跟踪器,并且用户数据不断地发送给我们。
分区:对这种类型的数据进行按日期和时间分区是非常正常的,例如/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
然而,Skewed表在这里可以提供帮助。假设那些活跃用户是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过滤)时,将会得到快速的查询结果。

这还需要更多的内容,请参考此文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接