1. 程式人生 > >hive的靜態分割槽和動態分割槽

hive的靜態分割槽和動態分割槽

文章來自:https://blog.csdn.net/gavin_chun/article/details/78174492

一、靜態分割槽
1、建立分割槽表

hive (default)> create table order_mulit_partition(
              > order_number string,
              > event_time string
              > )
              > PARTITIONED BY(event_month string, step string)
              > row format delimited fields terminated by
'\t';

2、載入資料到分割槽表

 load data local inpath '/opt/data/order_created.txt' overwrite into table order_mulit_partition PARTITION(event_month='201405', step='1');

order_created.txt內容如下

 order_number           event_time 
10703007267488  2014-05-01 06:01:12.334+01
10101043505096  2014-05-01 07:28:12.342+01
10103043509747  2014-05-01 07:50:12
.33+01 10103043501575 2014-05-01 09:27:12.33+01 10104043514061 2014-05-01 09:03:12.324+01
6

3、這種手動指定分割槽載入資料,就是常說的靜態分割槽的使用。但是在日常工作中用的比較多的是動態分割槽。

二、動態分割槽
需求:按照不同部門作為分割槽導資料到目標表
以上需求如果用靜態分割槽的話,資料量大你是不是很懵逼??所以這個需求一般採用動態分割槽來實現。
1、建立目標表

hive (default)> create table emp_dynamic_partition(
              > empno int, 
              > ename string
, > job string, > mgr int, > hiredate string, > sal double, > comm double) > PARTITIONED BY(deptno int) > row format delimited fields terminated by '\t';
10

2、採用動態方式載入資料到目標表
載入之前先設定一下下面的引數

hive (default)> set hive.exec.dynamic.partition.mode=nonstrict

開始載入

insert into table emp_dynamic_partition partition(deptno)
select empno , ename , job , mgr , hiredate , sal , comm, deptno from emp;

上面載入資料方式並沒有指定具體的分割槽,只是指出了分割槽欄位。在select最後一個欄位必須跟你的分割槽欄位,這樣就會自行根據deptno的value來分割槽。

3、驗證一下
有值

hive (default)> select * from emp_dynamic_partition;
OK
emp_dynamic_partition.empno     emp_dynamic_partition.ename     emp_dynamic_partition.job       emp_dynamic_partition.mgr       emp_dynamic_partition.hiredate     emp_dynamic_partition.sal       emp_dynamic_partition.comm      emp_dynamic_partition.deptno
7782    CLARK   MANAGER 7839    1981-6-9        2450.0  NULL    10
7839    KING    PRESIDENT       NULL    1981-11-17      5000.0  NULL    10
7934    MILLER  CLERK   7782    1982-1-23       1300.0  NULL    10
7369    SMITH   CLERK   7902    1980-12-17      800.0   NULL    20
7566    JONES   MANAGER 7839    1981-4-2        2975.0  NULL    20
7788    SCOTT   ANALYST 7566    1987-4-19       3000.0  NULL    20
7876    ADAMS   CLERK   7788    1987-5-23       1100.0  NULL    20
7902    FORD    ANALYST 7566    1981-12-3       3000.0  NULL    20
7499    ALLEN   SALESMAN        7698    1981-2-20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981-2-22       1250.0  500.0   30
7654    MARTIN  SALESMAN        7698    1981-9-28       1250.0  1400.0  30
7698    BLAKE   MANAGER 7839    1981-5-1        2850.0  NULL    30
7844    TURNER  SALESMAN        7698    1981-9-8        1500.0  0.0     30
7900    JAMES   CLERK   7698    1981-12-3       950.0   NULL    30
8888    HIVE    PROGRAM 7839    1988-1-23       10300.0 NULL    NULL

有分割槽(自動分割槽)

hive (default)> show partitions emp_dynamic_partition;
OK
partition
deptno=10
deptno=20
deptno=30
deptno=__HIVE_DEFAULT_PARTITION__
Time taken: 0.29 seconds, Fetched: 4 row
hive (default)> select * from emp;
OK
emp.empno       emp.ename       emp.job emp.mgr emp.hiredate    emp.sal emp.comm        emp.deptno
7369    SMITH   CLERK   7902    1980-12-17      800.0   NULL    20
7499    ALLEN   SALESMAN        7698    1981-2-20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981-2-22       1250.0  500.0   30
7566    JONES   MANAGER 7839    1981-4-2        2975.0  NULL    20
7654    MARTIN  SALESMAN        7698    1981-9-28       1250.0  1400.0  30
7698    BLAKE   MANAGER 7839    1981-5-1        2850.0  NULL    30
7782    CLARK   MANAGER 7839    1981-6-9        2450.0  NULL    10
7788    SCOTT   ANALYST 7566    1987-4-19       3000.0  NULL    20
7839    KING    PRESIDENT       NULL    1981-11-17      5000.0  NULL    10
7844    TURNER  SALESMAN        7698    1981-9-8        1500.0  0.0     30
7876    ADAMS   CLERK   7788    1987-5-23       1100.0  NULL    20
7900    JAMES   CLERK   7698    1981-12-3       950.0   NULL    30
7902    FORD    ANALYST 7566    1981-12-3       3000.0  NULL    20
7934    MILLER  CLERK   7782    1982-1-23       1300.0  NULL    10
8888    HIVE    PROGRAM 7839    1988-1-23       10300.0 NULL    NULL