20
2021
01

Hive的分区分桶

我们发现其实桶的概念就是MapReduce的分区的概念,两者完全相同。物理上每个桶就是目录里的一个文件,一个作业产生的桶(输出文件)数量和reduce任务个数相同。


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


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


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


• 分区表

如果在建表时使用了 PARTITIONED BY,表即为分区表。分区表下的数据按分区键的值(或值的范围)放在HDFS下的不同目录中,可以有效减少查询时扫描的数据量,提升查询效率。

• 非分区表

非分区表即除分区表之外的表。

按表是否分桶分类

按表是否分桶可以将表分为两类:分桶表和非分桶表。

• 分桶表

如果在建表时使用了 CLUSTERED BY … INTO … BUCKETS,表即为分桶表。分桶表下的数据按

分桶键的哈希值放在HDFS下的不同目录中,可以有效减少查询时扫描的数据量,提升查询效率。

• 非分桶表

非分桶表即除分桶表之外的表

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。