Hive中的表可以分为分区表和非分区表两种:
- 非分区表:一个表对应一个HDFS文件,所有数据存放在一个文件中。
- 分区表:一个表对应多个HDFS文件,每个文件存放表的一部分数据,通常是以分区字段的值来区分不同的文件。
分区表和非分区表的主要区别如下:
- 数据存储位置:
- 非分区表:所有数据存储在一个HDFS文件中。
- 分区表:数据根据分区字段存储在不同的目录下,每个目录对应表的一部分数据。
- 数据查询效率:
- 非分区表:即使我们只需要访问表的一部分数据,也需要扫描整个表,查询效率较低。
- 分区表:我们可以只扫描存放需要数据的分区,避免无谓的扫描,查询效率较高。
- 数据加载方式:
- 非分区表:通过INSERT OVERWRITE或INSERT INTO加载数据。
- 分区表:通常通过INSERT OVERWRITE TABLE partition(cols..)加载数据到指定分区,更方便高效。
- 数据删除方式:
- 非分区表:删除整个表的数据,然后重新加载。
- 分区表:可以删除某个分区的数据,然后重新加载该分区,无需操作整个表。
- 表结构修改:
- 非分区表:较难进行结构修改,会影响所有数据。
- 分区表:可以独立修改各个分区的结构,不存在互相影响。
所以,总结来说,分区表和非分区表在数据存储位置、查询效率、加载方式、删除方式以及修改结构方面都存在较大差异。选择适合业务场景的表类型,对获得高性能至关重要。