在Hive中经历了Skewed tables之后,我对将数据存储到倾斜表的方式以及处理分区表的方式感到困惑。可有人明确说明具有显着的例子的区别在何处这两个概念Hive中的倾斜与分区
Skewed Tables and Partitioned Tables
一致,他们有什么不同? 请做提供示例。
在Hive中经历了Skewed tables之后,我对将数据存储到倾斜表的方式以及处理分区表的方式感到困惑。可有人明确说明具有显着的例子的区别在何处这两个概念Hive中的倾斜与分区
Skewed Tables and Partitioned Tables
一致,他们有什么不同? 请做提供示例。
倾斜和分区表的目的是相同的,以优化查询。但是,他们的做法和适用的方式有点不同。
我们假设我们正在构建类似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过滤),这将导致查询速度加快。