hive bucket了解表示例(bucket x of y)

n8ghc7c1  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(413)

嗨,我是一个非常新的Hive,我已经通过了hadoop的概念在行动,但未能理解以下几行。有人能帮我在这方面吗?

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

tablesample的一般语法是tablesample(bucket x of y)
查询的样本量约为1/y。此外,y需要是表创建时为表指定的bucket数的倍数或因子。例如,如果将y更改为16,则查询将变为

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

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

jv2fixgn

jv2fixgn1#

哪一部分你不明白?
创建表并使用 clustered by 子句将数据存储到32个存储桶中(作为示例),配置单元使用确定性哈希函数将数据存储到32个存储桶中。当你使用 TABLESAMPLE(BUCKET x OUT OF y) ,hive将您的bucket分成y个bucket组,然后选择每组的第x个bucket。例如:
如果你使用 TABLESAMPLE(BUCKET 6 OUT OF 8) ,Hive将您的32个桶分成8个桶的一组,形成4个8个桶的一组,然后选择每组的第6个桶,从而选择6、14、22、30个桶。
如果你使用 TABLESAMPLE(BUCKET 23 OUT OF 32) ,hive会将32个bucket分成32个一组,结果只有一组32个bucket,然后选择第23个bucket作为结果。
如果你使用 TABLESAMPLE(BUCKET 3 OUT OF 64) ,hive将您的32个bucket分成64个bucket的组,得到一组64个“半bucket”,然后选择对应于第三个满bucket的半bucket。

相关问题