hive分区和分桶

分区

  1. 分区的类型
    动态分区,静态分区

###hive静态分区

在这里插入图片描述

静态分区下单分区

在这里插入图片描述
静态分区单分区(如果没有数据在web页面是不显示的)
在这里插入图片描述

向里面发送数据
在这里插入图片描述
发送数据之后 在查看
在这里插入图片描述
传输数据
在web页面下显示的是hh文件夹。以文件夹区分

删除分区
alter table tablename drop partition01 (hh=“hh01”)必须要有aaa这个分区才能删除

静态分区下双分区

在这里插入图片描述
向里面传输数据,因为是双分区
在这里插入图片描述
还是没有数据
如果我单独向其中一个分区传输数据会报错
在这里插入图片描述

如果我单独向两个分区传输数据
在这里插入图片描述
为什么单独向一个分区传输数据会出错?
在这里插入图片描述
因为你创建表的时候指定的就是双分区,所以只能向子分区里传输文件
相当于把分区的信息加到了表里面,相当于两个字段,
第一个字段里能放的就是第二个分区的信息,只能放第二个分区的信息。
第二个分区放的是数据的信息。

添加分区

添加分区:alter table partition02 add partition (hh=“123”,heihei=123);
正确的添加双分区,必须双分区要同时创建,或者在之前的分区上,创建子分区。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
错误的添加分区
在这里插入图片描述
有添加分区就肯定有删除分区
alter table partition02 drop partition (hh=“123”,heihei=456)
在这里插入图片描述
如果子分区被删完主分区也不会留下,
可以只删除一个子分区,也可以直接删除主分区,如果主分区被删,下面的子分区会被全部删除,
在这里插入图片描述
在这里插入图片描述

动态分区

动态分区其实就是不用你自己去分区,而是自动分区。

动态分区和静态分区的区别就在于需要修改权限并且需要修改状态

修改的状态和权限都是暂时的,如果你退出hive之后,这些都会回归原来的状态,

1.修改权限
set hive.exec.dynamic.partition;

默认状态就是ture;
如果为true就不用修改,如果不是true就需要修改。
set hive.exec.dynamic.partition=true;

2.修改默认状态
在这里插入图片描述
默认状态是strict创建动态分区的话需要修改为nostrict
set hive.exec.dynamic.partition.mode=nostrict;
创建第一个动态分区表
在这里插入图片描述
复制第一个动态分区表的格式
在这里插入图片描述
复制的表的格式和第一个表的格式一样
create table student1 like student;
like:只复制表的结构,不复制表的数据。
第一个分区表是从本地向里面传输数据
在这里插入图片描述
load data local inpath ‘/root/bb.txt’ into table traffic.student partition (hh=“hhh”);
//不能是表里的数据,与上边对应
第二个分区表是是从第一个数据表里向第二个数据表里面传输数据。

动态分区表其实就是不需要自己制定分区,因为我没有与之匹配的数据,所以我才会创建一个相同的数据表来给动态分区表赋值

动态分区追加数据

from student insert into table student1 partition (hh) select * ; //如果表里有数据会追加
在这里插入图片描述

动态分区覆盖数据

我用了两种不同的方式添加数据,喜欢那种可以用哪一种
insert overwrite table student1 partition(hh) select * from student;//如果表里有数据会替换
在这里插入图片描述
根据上个表的分区自动分区。
在这里插入图片描述
如果你有数据并且存在了hive中,而且表的格式和动态分区表的格式一样,就可以把数据发送到动态分区表。

分桶

创建分桶的时候需要先开启分桶
在这里插入图片描述
set hive.enforce.bucketing=true

创建分桶表
在这里插入图片描述
clustered(聚集索引)
clustered by (字段名)//表里的数据 into 4 buckets //创建四个桶

向桶内发送数据

首先,我们要有和分桶一样结构的表(这个表不是分桶表),里面还要有与之对应的数据,才可以向分桶发送数据。
insert into table bucket select * from bucket01;
在这里插入图片描述

我们可以看出hive的底层是hdfs和MapReduce。
最后的数据会由MapReduce处理发送到hdfs上存储。
并且在hdfs上创建分桶。

在这里插入图片描述

抽样分桶

select * from bucket tablesample(bucket 2 out of 4 by id);
抽样出分桶里的数据
前面的1是从第几个分桶开始。
后面的4是总分桶的倍数或者因子。在这里插入图片描述
提示: 前面的数字不要比后面的大
(小弟初识大数据,有错误的,希望各位大牛指正,谢谢各位!!!!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值