gpt4 book ai didi

hadoop - Hive Buckets——理解TABLESAMPLE(BUCKET X OUT OF Y)

转载 作者:可可西里 更新时间:2023-11-01 14:18:06 26 4
gpt4 key购买 nike

您好,我是 Hive 的新手,我已经了解了 hadoop 中的桶概念,但未能理解以下几行。有人可以帮助我吗?

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

TABLESAMPLE 的一般语法是表样本(从 y 中取出 x 桶)

查询的样本量约为 1/y。此外,y 需要是创建表时为表指定的桶数的倍数或因数。例如,如果我们将 y 更改为 16,则查询变为

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

那么样本量大约包括每 16 个用户中的 1 个(因为 bucket 列是 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 OF 32),hive 会将您的 32 个桶分成 32 个一组,结果只有一组 32 个桶,然后选择第 23 个桶作为你的结果。

  • 如果您使用 TABLESAMPLE(BUCKET 3 OUT OF 64),hive 会将您的 32 个桶分成每组 64 个桶,从而产生一组 64 个“半桶”和然后选择与第 3 个全桶对应的半桶。

关于hadoop - Hive Buckets——理解TABLESAMPLE(BUCKET X OUT OF Y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18781869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com