蜂巢中分区与分组的比较差异

时间:2016-09-16 09:58:43

标签: hadoop hive

我们能否定义一种方法,用以决定是否应该进行分组或分区?

1 个答案:

答案 0 :(得分:3)

通常,hive中的分区提供了一种将hive表数据分隔为多个文件/ directorys的方法。但是,分区可以提供有效的结果,

  • 分区数量有限
  • 比较大小的分区

但是在所有情况下都可能无法实现这一点,例如在基于地理位置(如国家/地区)对表格进行分区时,一些较大的国家/地区将拥有较大的分区(例如:4-5个国家/地区本身占总数据的70-80%)小国家的数据将创建小分区(世界上所有国家可能仅占总数据的20-30%)。因此,在这些情况下,分区将不是理想的。
为了克服过度分区的问题,Hive提供了Bucketing概念,这是另一种将表数据集分解为更易于管理的部分的技术。 Bucketing概念基于(在Bucketed列上的散列函数)mod(根据桶的总数).hash_function取决于bucketing列的类型。
具有相同分段列的记录将始终存储在同一个存储桶中,物理上每个存储桶只是表目录中的文件,并且存储桶编号是从1开始的。

当字段具有 高基数 并且数据在存储桶之间均匀分布时,

暂停 效果很好。当分区字段的基数 不太高 时, 分区 效果最佳。