Hive(五)Hive分桶表
分桶表
分桶和分区一样,也是将数据拆分和分离的一种方式,不同点时,分区是通过目录的方式进行数据拆分。
而分桶是将数据文件进行拆分和隔离的一种方式,不同的桶的数据分布在同一个目录,不同文件。
注意,分区是通过外部字段进行分区,而分桶是根据表中的内在属性进行分桶。
使用分桶表
- 创建分桶表
1 | create table user_bucket(id int,name string) |
根据id 进行分表,并且分到4个桶里。
- 插入数据
1 |
|
- 查看数据
+—————–+——————-+
| user_bucket.id | user_bucket.name |
+—————–+——————-+
| 2 | name2 |
| 1 | name1 |
| 3 | name3 |
+—————–+——————-+
可以看到数据分散到不同的桶中;并在在目录下由多个文件来存储。

分桶的时候 是将对应的值先进行hash ,然后再对桶的个数进行取模来决定放到那个桶中。
分桶计算的输出结果,每个桶对应到 MapReduce 中的一个Reduce job。 hive中的分桶和MR 中的分区是可以看做同一个处理过程。一个hive的几个分桶,在mr执行的时候就执行几个分区。
为了尽量的利用reduce job的并行处理,因为不同的桶是由不同的job处理的,所以 reduce job 的个数不要指定,让它自定决定。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment


