需要解释Hive中的BUCKET和rand()函数

时间:2017-11-27 10:11:16

标签: hive

有人可以解释一下以下查询的含义吗?

1. SELECT * from numbers TABLESAMPLE(BUCKET 3 OUT OF 10 ON rand()) s;
2. SELECT * from numbers TABLESAMPLE(BUCKET 3 OUT OF 10 ON number) s;
3. SELECT * from numbers TABLESAMPLE(BUCKET 1 OUT OF 2 ON number) s;
4. SELECT * from numbers TABLESAMPLE(BUCKET 2 OUT OF 2 ON number) s;

我试图以所有可能的方式理解上述查询,但无法向前移动一点。请详细解释我。

提前致谢。

Source 页码 - 110

1 个答案:

答案 0 :(得分:0)

@John Deer,当我们在列上进行存储时,数据被分成指定的存储区,因此文件在Hadoop中创建。在检索指定存储桶的数据时,数据将从指定的存储桶/文件中提取出来。因此,数据保持不变。

然而,如果我们使用rand函数(产生随机数),那么每次执行rand()都会改变数据。

  1. SELECT * from numbers TABLESAMPLE(BUCKET 3 out of 10 on rand())s;
  2. 说明:这里有10个桶,其中数据是套管的。我们在bucketed列上使用rand函数来检索数据。因此,它不是从第3个桶中提取随机数据。所以每次执行rand都会改变数据。

    1. SELECT * from numbers TABLESAMPLE(BUCKET 1 OUT OF 2 ON number);
    2. 说明:这里有2个桶,其中数据是套管的。我们使用bucketed列来检索数据。因此,数据从第二个存储桶中提取出来,即使您无论何时运行查询,它也不会改变。

      希望这会有所帮助!!