Hive分区和分桶的区别和优缺点

前言

        主要介绍:分区/Partitioning 和分桶/Bucketing的区别;如何创建分区表、分桶表;分区和分桶的优缺点对比。以Hive为例,其他数据存储和计算架构(如Spark)类似。

什么是分区和分桶

        Hive作为一种开源数据仓库系统,用来存储、查询和分析大数据集。Hive中的数据,逻辑概念上存储结构划分为表、区/Partition和桶/Bucket:这都是数据在存储系统如何存放、如何组织的方式。

区Partition

        Hive中的表一般会按照某一个列进行分区,例如常见的按照日期分区。表可以理解为主目录,分区可以理解为主目录下的子文件夹,例如日期分区,每个日期文件夹下存储对应日期的数据。有了分区,我们可疑具体定位到某个数据分区,而不用扫描整个表,查询更快。

桶Bucket

        Hive中,还可以基于某个高基数的列,应用哈希函数,将分区里的数据进一步划分到不同的桶/Bucket中,目的是在附加这个哈希结构后,通常能得到更好的查询性能。含义是对具体分区文件夹下的数据用哈希结构进一步组织起来,这样原来子文件里的数据需要全部扫描,有了哈希结构后,将会更好的命中数据。

创建分区/分桶的命令

-- Hive里创建区Partitioning的命令
CREATE TABLE table_name (column1 data_type, column2 data_type) PARTITIONED BY (partition1 data_type, partition2 data_type,….);

-- Hive里创建区Partitioning且创建桶Buck

你可能感兴趣的:(hive,PySpark简明教程,SQL,分区表,分桶,分区和分桶的区别)