嗨,我是一个非常新的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。在真正的随机抽样下,它的值应该无关紧要。
1条答案
按热度按时间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。