嗨,我对 hive 非常陌生,我已经在 hadoop 中经历了桶的概念,但未能理解以下几行。有人可以帮我吗?
SELECT avg(viewTime)
FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 32);
TABLESAMPLE 的一般语法是 TABLESAMPLE(BUCKET x OUT OF 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 的值仅用于选择要使用的存储桶。在真正随机抽样下,它的值应该无关紧要。