Hive Buckets-understanding TABLESAMPLE(BUCKET X OUT OF Y)



嗨,我对 Hive 非常陌生,我已经在 Hadoop 中了解了存储桶的概念,但未能理解以下几行。

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 32);

TABLESAMPLE 的一般语法是表样本(桶 x 出 Y)

查询的样本大小约为 1/y。此外,y 必须是创建表时为表指定的存储桶数的倍数或因子。例如,如果我们将 y 更改为 16,则查询变为

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 16);

然后,样本大小包括大约每 16 个用户中的 1 个(因为存储桶列是 userid)。该表仍有 32 个存储桶,但 Hive 尝试通过同时处理存储桶 1 和 17 来满足此查询。另一方面,如果 y 指定为 64,则 Hive 将对一个存储桶中的一半数据执行查询。x 的值仅用于选择要使用的存储桶。在真正的随机抽样下,它的价值应该无关紧要。

你不明白其中的哪一部分?

当您创建表并使用 clustered by 子句将其存储桶到 32 个存储桶中(例如),Hive 使用确定性哈希函数将数据存储桶到 32 个存储桶中。然后,当您使用 TABLESAMPLE(BUCKET x OUT OF y) 时,hive 会将存储桶划分为 y 个存储桶的组,然后选取每个组的第 x 个存储桶。例如:

    如果使用 TABLESAMPLE(BUCKET 6 OUT OF 8) ,hive 会将 32 个存储桶分成 8 个存储桶的组,从而生成 4 组,每组 8 个存储桶,
  • 然后选取每组的第 6 个存储桶,从而选择存储桶 6、14、22、30。

  • 如果使用 TABLESAMPLE(BUCKET 23 OUT OF 32) ,Hive 会将 32 个存储桶分成 32 个组,结果
  • 只有 1 组 32 个存储桶,然后选取第 23 个存储桶作为结果。

  • 如果使用 TABLESAMPLE(BUCKET 3 OUT OF 64),Hive 会将 32 个存储桶分成 64 个存储桶的组,从而生成 1 组 64 个"半存储桶",然后选取对应于第三个完整存储桶的半存储桶。

相关内容

  • 没有找到相关文章

最新更新