Hive由多个列聚集

时间:2015-06-16 15:02:33

标签: hadoop hive buckets

据我所知,当hive表在一列上聚类时,它会执行该bucketed列的哈希函数,然后将该行数据放入其中一个桶中。并且每个桶都有一个文件,即如果有32个桶,则hdfs中有32个文件。

在多个列上进行聚簇是什么意思?例如,假设该表具有CLUSTERED BY(大陆,国家)INTO 32 BUCKETS。

如果有多列,如何执行散列函数?

将生成多少个文件?这还是32吗?

2 个答案:

答案 0 :(得分:6)

  1. 是的,文件数仍为32.
  2. 哈希函数将通过将“continent,country”视为单个字符串来运行,然后将其用作输入。
  3. 希望它有所帮助!!

答案 1 :(得分:0)

通常,存储桶编号由表达式hash_function(bucketing_column)mod num_buckets确定。 (那里也有一个'0x7FFFFFFF,但那并不重要)。 hash_function取决于bucketing列的类型。对于int,它很容易,hash_int(i)== i。例如,如果user_id是一个int,并且有10个桶,我们希望所有以0结尾的user_id都在桶1中,所有user_id以1结尾在桶2中,等等。对于其他数据类型,它是有点棘手。特别是,BIGINT的散列与BIGINT不同。并且字符串或复杂数据类型的散列将是从值中派生的某个数字,但不是人类可识别的任何数字。例如,如果user_id是STRING,那么存储桶1中的user_id可能不会以0结尾。通常,基于散列分配行将使您在存储桶中进行均匀分布。

参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables