大家好,我对 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每组的第 'th 个桶。例如:
如果你使用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 个组,从而得到一组 32 个存储桶,然后选择第 23 个存储桶作为您的结果。
如果你使用TABLESAMPLE(BUCKET 3 OUT OF 64)
,hive 会将 32 个桶分成 64 个桶组,从而得到一组 64 个“半桶”,然后选择与第 3 个满桶相对应的半桶。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)