在Hive中浏览Skewed tables后,我对Skewed表的数据存储方式以及分区表的处理方式感到困惑。有人可以用明显的例子清楚地说明这两个概念的位置
Skewed Tables and Partitioned Tables
重合并且它们有什么不同? 请提供示例。
答案 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。