提问:为什么要创建分桶表呢?
我认为有以下两点原因:
(1):分桶表是为了在分区表的基础上,进一步区分数据,来实现一些需求,本质还是避免全表扫描;比如当涉及到表关联是可以创建分桶表;
(2):分桶表也可以实现数据抽样;

和动态分区一样,分桶需要开启分桶支持;

默认:false;设置为true之后,mr运行时会根据bucket的个数自动分配reduce
task个数。

clustered by (指定分桶字段) into 分桶个数 buckets,
这里按照age字段分为4个桶;
注意:一次作业产生的桶(文件数量)和reduce task个数一致。


加载数据到分桶表:insert into psnbucket select id,name,age from psn13;

查询分桶表数据:select * from psnbucket;

数据抽样:select id,name,age from psnbucket tablesample(bucket 2 out of 4 on age);
tablesample:用来数据抽样,参数2表示从2号桶开始取数据,参数4表示每隔4个桶取一次数据;

从hdfs WebUI界面可以看出当前hive psnbucket表是四个文件,也就是分成四个桶;
网友评论