前言
主要介绍:分区/Partitioning 和分桶/Bucketing的区别;如何创建分区表、分桶表;分区和分桶的优缺点对比。以Hive为例,其他数据存储和计算架构(如Spark)类似。
什么是分区和分桶
Hive作为一种开源数据仓库系统,用来存储、查询和分析大数据集。Hive中的数据,逻辑概念上存储结构划分为表、区/Partition和桶/Bucket:这都是数据在存储系统如何存放、如何组织的方式。
区Partition
Hive中的表一般会按照某一个列进行分区,例如常见的按照日期分区。表可以理解为主目录,分区可以理解为主目录下的子文件夹,例如日期分区,每个日期文件夹下存储对应日期的数据。有了分区,我们可疑具体定位到某个数据分区,而不用扫描整个表,查询更快。
桶Bucket
Hive中,还可以基于某个高基数的列,应用哈希函数,将分区里的数据进一步划分到不同的桶/Bucket中,目的是在附加这个哈希结构后,通常能得到更好的查询性能。含义是对具体分区文件夹下的数据用哈希结构进一步组织起来,这样原来子文件里的数据需要全部扫描,有了哈希结构后,将会更好的命中数据。