Hive的桶表

mac2026-08-11  8

什么是桶表

在前面,我们讲到了内部表和外部表,以及使用分区表对数据进行细分管理。其实对于每一个表或者分区,Hive还可以进行更为细颗粒的数据细分划分和管理,也就是桶(Bucket)。Hive也是针对某一列进行桶的组织,Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

采用桶表的理由

把表(或者分区)组织成桶(Bucket)有两个理由:

(1)更高的查询效率:桶为表加上额外结构,链接相同列划分了桶的表,可以使用map-side join更加高效。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以

(2)更高的取样效率:没有分区的话需要扫描整个数据集

总结

桶的概念就是MapReduce的分区的概念,两者完全相同。桶则是按照数据内容的某个值进行分桶,把一个大文件散列称为一个个小文件。物理上每个桶就是目录里的一个文件,一个作业产生的桶数量和reduce任务个数相同。

而分区表代表了数据的仓库,也就是文件夹目录。每个文件夹下面可以放不同的数据文件。通过文件夹可以查询里面存放的文件。但文件夹本身和数据的内容毫无关系。

 

这些小文件可以单独排序。如果另外一个表也按照同样的规则分成了一个个小文件。两个表join的时候,就不必要扫描整个表,只需要匹配相同分桶的数据即可。效率当然大大提升。

同样,对数据抽样的时候,也不需要扫描整个文件。只需要对每个分区按照相同规则抽取一部分数据即可。

最新回复(0)