分區表:
有兩種類型
靜態分區:需要事先指定分區的條件,不是很靈活
根據員工的部門號建立分區
create table emp_part_1
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int)
partitioned by (deptno int)
row format delimited fields terminated by ',';
和普通表的區別就是把分區條件的字段寫在了分區條件上 ;
插入數據使用具體值進行插入,需要7列就可以了
insert into table emp_part_1 partition(deptno=10) values(7499,'ALLEN','SALESMAN',7698,'1981/2/20',1600,300);
使用查詢值插入語句,需要查詢8列,最後一列是部門號
insert into table emp_part_1 partition(deptno=10) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=10;
insert into table emp_part_1 partition(deptno=20) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=20;
insert into table emp_part_1 partition(deptno=30) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=30;
動態分區
啓動動態分區:
set hive.exec.dynamic.partition =true;
默認false,表示是否開啓動態分區功能
set hive.exec.dynamic.partition.mode = nonstrict;
默認strict,表示允許所有分區都是動態的,如果是strict必須有靜態分區字段
(*)根據一個字段創建動態分區表
create table emp2
(empno int,ename string,sal int)
partitioned by (job string);
插入數據 insert into table emp2 select empno,ename,sal,job from emp;
注意:根據插入數據的最後一個字段動態建立分區。
(*)根據多個字段創建動態分區表
create table emp3
(empno int,ename string,sal int)
partitioned by (deptno int,job string);
插入數據 insert into table emp3 select empno,ename,sal,deptno,job from emp;
注意:根據插入數據的最後兩個字段動態建立分區。
(*)結合靜態分區和動態分區
create table emp4
(empno int,ename string,sal int)
partitioned by (deptno int,job string);
插入數據
insert into table emp4 partition(deptno=10,job) select empno,ename,sal,job from emp where deptno=10;