파티션 테이블이란
파티션 테이블이란 하나의 서랍장에 모든 데이털르 넣는 게 아니라 각각 서랍별로 보관하는 테이블이다.
그렇기 때문에 특정 조건에 있는 테이블을 스캔할 때, 특정 파티션만 빠르게 스캔할 수 있다.
그래서 회사에서 하둡은 파티션 테이블로 사용하여 데이터를 검색한다.
이번 예제는 하둡이 아닌 리눅스에 있는 파일로 하이브에서 파티션 테이블로 검색해본다.
그럼 파티션 테이블로 검색하는 과정을 알아보자
emp 테이블을 deptno 를 기준으로 한 파티션 테이블을 만들어서 활용할 것이다.
1. 우선 하이브에 파티션 테이블을 생성한다. (deptno2 로 생성)
hive> create table emp_partition
( empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int )
partitioned by ( deptno2 int)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;
2. 리눅스 시스템 오라클 계정으로 와서,
오라클 계정에 있는 emp 테이블을 부서번호별로 각각 3개의 파일로 만든다(10.csv ,20.csv, 30.csv)
(base) [oracle@centos ~]$ awk -F ',' '$8==10 {print $0}' emp.csv >> 10.csv
(base) [oracle@centos ~]$ awk -F ',' '$8==20 {print $0}' emp.csv >> 20.csv
(base) [oracle@centos ~]$ awk -F ',' '$8==30 {print $0}' emp.csv >> 30.csv
3. 리눅스 오라클 계정에서 만든 csv 를 하이브에서 만든 파티션 테이블에 로드해보자
[1] 10.csv
hive> load data local inpath '/home/oracle/10.csv'
overwrite into table emp_partition
partition ( deptno2='10');
* 하둡 분산 파일 시스템에서 로드한 것과 local 만 다르고 다른 코드는 같다!
[2] 20.csv
[3] 30.csv
10.csv 와 같은 방식으로 로드하면 된다.
4. 하이브에 파티션 테이블이 생성되었는지 확인해보자
지금 검색하는 테이블이 파티션 테이블인지 확인하는 명령어
hive > show partitions 테이블명
hive > show partitions depno2
그럼 이제 emp 테이블의 부서번호(deptno)를 기준으로 하는 파티션 테이블(deptno2)이 생성됐다!
이제 원하는 대로 데이터를 검색해보면 된다.
빅데이터를 넣으면 각각의 파티션에서만 빠르게 찾아보기 때문에 속도가 훨씬 빠를 것이다.