【发布时间】:2017-11-30 11:13:24
【问题描述】:
在 Hive 中查看Skewed tables 之后,我对倾斜表的数据存储方式以及分区表的处理方式感到困惑。有人可以用标记的例子清楚地说明这两个概念的区别
Skewed Tables and Partitioned Tables
重合,它们在哪里不同? 请提供示例。
【问题讨论】:
标签: hive hiveql partitioning hadoop-partitioning skew
在 Hive 中查看Skewed tables 之后,我对倾斜表的数据存储方式以及分区表的处理方式感到困惑。有人可以用标记的例子清楚地说明这两个概念的区别
Skewed Tables and Partitioned Tables
重合,它们在哪里不同? 请提供示例。
【问题讨论】:
标签: hive hiveql partitioning hadoop-partitioning skew
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。
【讨论】: