1.创建分区表
create table dept_partition(
deptno int,
dname string,
loc int
)
partitioned by (dt string) // 分区字段(date)
row format delimited fields terminated by '\t';
2.增删改查操作
2.1 插入数据
1)导入本地数据
-- 创建一个名字为dt='2022-06-14'的文件夹,在其中导入数据
load data local inpath '/opt/module/hive/datas/dept.txt'
into table dept_partition
partition(dt='2022-06-14');
分区表就是先创建文件夹,然后在文件夹中写入数据
换句话说,分区表就是将一张大表分成若干个文件夹进行管理
2)插入数据
insert overwrite table dept_partition partition(dt='2022-06-17')
select deptno, dname, loc from dept;
insert overwrite table dept_partition
select deptno, dname, loc, '2022-06-18' from dept;
2.2 操作数据
1)查看分区数
show partitions dept_partition;
2)查询指定分区
select * from dept_partition where dt='2022-06-14';
3)增加/删除分区
alter table dept_partition add partition(dt='2022-06-19');
alter table dept_partition drop partition(dt='2022-06-19');
ps.也可以直接在liunx端输入命令增加分区
-- 将18号分区复制一份,命名为13号分区
hadoop fs -cp /user/hive/warehouse/dept_partition/dt=2022-06-18
/user/hive/warehouse/dept_partition/dt=2022-06-13
ps..如果直接在网页端新建文件夹,终端不会显示新建的分区,必须修复
msck repair table dept_partition;
3. 二级分区表
就是大文件夹套小文件夹
3.1 创建分区表
create table dept_partition2(
deptno int,
dname string,
loc int
)
partitioned by (month string, day string) // month为父目录,day为子目录
row format delimited fields terminated by '\t';
3.2 插入数据
load data local inpath '/opt/module/hive/datas/dept.txt'
into table dept_partition2 partition(month='2022-06', day='15');
insert into dept_partition2 partition(month='2022-06',day='15')
select deptno, dname, loc from dept;
4.动态分区
普通数据无法直接转化为分区表,只能先新建新的分区表,再将旧数据插入这个新的分区表
1)创建分区表
create table emp_par(
empno int,
ename string,
job string,
salary decimal(16,2)
) partitioned by (deptno int)
row format delimited fields terminated by '\t';
2)然后将数据插入这张分区表
方式一:一个分区一个分区的插入
insert into emp_par partition(deptno=10)
select empno,ename,job,sal from emp where deptno=10; //然后是11,12...
方式二:动态分区一次搞定
insert overwrite table emp_par // 不用指定分区
select empno,ename,job,sal,deptno from emp; //直接把deptno写到这里
ps.动态分区的时候需要注意自定义分区数是有上限的: