Hive 配置单元中的倾斜与分区

Hive 配置单元中的倾斜与分区,hive,hiveql,partitioning,hadoop-partitioning,skew,Hive,Hiveql,Partitioning,Hadoop Partitioning,Skew,在经历了Hive之后,我对倾斜表的数据存储方式和分区表的数据处理方式感到困惑。有人能用标记的例子清楚地说明这两个概念的不同之处吗 倾斜表和分区表 一致性和不同之处? 请提供示例。倾斜表和分区表的目的是相同的,以优化查询。然而,它们的工作方式和适用时间略有不同 让我们假设我们正在建立像Strava这样的健身跟踪器,用户数据会不断发送给我们 分区:按日期和时间对此类数据进行分区是很正常的,如/year=2017/month=10/day=12等。这样,任何基于日期和时间的过滤器都会非常快,例如

在经历了Hive之后,我对倾斜表的数据存储方式和分区表的数据处理方式感到困惑。有人能用标记的例子清楚地说明这两个概念的不同之处吗

倾斜表和分区表

一致性和不同之处?
请提供示例。

倾斜表和分区表的目的是相同的,以优化查询。然而,它们的工作方式和适用时间略有不同

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

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

  • 歪斜的桌子
    :可能会发生这样的情况:一些用户不仅发送健身房锻炼,还发送步行步数、地理位置、骑自行车、卡路里消耗、睡眠等等。这些用户非常少,但与普通用户相比,他们发送的数据量非常大。因此,如果您想通过
    用户ID
    进行查询,则速度会很慢:
从表中选择col,其中year=2017,month=10,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筛选)时,这将导致快速查询

还有更多