分区表:
在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了
分区字段是一个虚拟的字段 不存放任何数据,分区表字段不能够在表中已经存在。
分区字段的数据来自于装载分区表数据的时候指定的
分区表的字段在hdfs上的效果就是在建立表的文件夹下面又创建了子文件,这样的目的把数据的划分更加细致 减少了查询时候全表扫描成本 只需要按照指定的分区扫描数据并显示结果即可

分桶表
将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去
分桶表(分簇表)创建之前需要开启分桶功能,分桶表创建的时候分桶字段必须是表中已经存储的字段,也就是说你要按照表中那个字段进行分桶
针对分桶表的数据导入:load data方式不能够导成分桶表的数据,没有分桶效果,原因在于load 本质是哪个相当于 hive 去帮我们执行hadoop fs -put
分桶表的数据采用insert+select 插入的数据来自于查询结果(查询时候执行了mr程序)对应mr当中的partitioner
默认分桶负责 按照你指定的分桶字段clustered by 哈希值与分桶的个数 set mapreduce.job.reduces 进行模运算取余
分桶表也是把表所映射的结构化数据文件分成更细致的部分 但是更多的是用在join 查询提高效率之上
只需要把join 的字段在各自表当中进行分桶操作即可

分区表和分桶表的优点,字段的要求
分区表: 优点是:提高查询效率 要求是:分区字段绝对不能出现在表已有的字段内。
分桶表: 优点是:提高join效率和用于数据取样。 要求是:分桶字段必须出现在表已有的字段内。
Hive将表划分为分区(partition)表和分桶(bucket)表。
- 分区可以让数据的部分查询变得更快,也就是说,在加载数据的时候可以指定加载某一部分数据,并不是全量的数据。
- 分桶表通常是在原始数据中加入一些额外的结构,这些结构可以用于高效的查询,例如,基于ID的分桶可以使得用户的查询非常的块。
- 分区在HDFS上的表现形式是一个目录, 分桶是一个单独的文件
- 分区: 细化数据管理,直接读对应目录,缩小mapreduce程序要扫描的数据量
- 分桶:
1、提高join查询的效率(用分桶字段做连接字段)
2、提高采样的效率。
大数据培训