hive分区分桶

2020-06-08  本文已影响0人  安申

1.在hdfs目录上,桶是以文件的形式存在的,而不是像分区那样以文件夹的形式存在。

2.直接load data不会有分桶的效果,这样和不分桶一样,在HDFS上只有一个文件。

3.需要借助中间表,先将数据load到中间表,再将中间表的数据插入到分桶表中

4.创建分桶表时,对某字段进行排序,结果每个分桶表中的数据都是按照这个字段进行排好序的

5.不同于分区,分桶中的字段是原始数据中存在的;分区表,分区字段在原始文件中并不存在

6.分区表和分桶表的优点,字段的要求

分区表:    优点是:提高查询效率,避免全表扫描      要求是:分区字段绝对不能出现在表已有的字段内。

分桶表:    优点是:提高join效率和用于数据取样。    要求是:分桶字段必须出现在表已有的字段内。

7.选什么字段分桶

1)int类型字段比较友好

2)取hash后各分区块数据量比较均匀的字段

3)join的连接字段

当join连接的字段值取hash不够均匀时,多取一个其它字段作为分桶字段;

分桶公式:

bucket num = hash_function(bucketing_column) mod num_buckets

列的值做哈希取余 决定数据应该存储到哪个桶

分桶是相对分区进行更细粒度的划分。分桶将整个数据内容安装某列属性值得hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。

————————————————

版权声明:本文为CSDN博主「epitomizelu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/epitomizelu/java/article/details/41911657

上一篇下一篇

猜你喜欢

热点阅读