본문 바로가기

하이브(Hive)

리눅스에 있는 데이터로 하이브에서 파티션 테이블 생성하기

파티션 테이블이란 

파티션 테이블 구조

파티션 테이블이란 하나의 서랍장에 모든 데이털르 넣는 게 아니라 각각 서랍별로  보관하는 테이블이다.

그렇기 때문에 특정 조건에 있는 테이블을 스캔할 때, 특정 파티션만 빠르게 스캔할 수 있다.

그래서 회사에서 하둡은 파티션 테이블로 사용하여 데이터를 검색한다. 

이번 예제는 하둡이 아닌 리눅스에 있는 파일로 하이브에서 파티션 테이블로 검색해본다. 

 

그럼 파티션 테이블로 검색하는 과정을 알아보자

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)이 생성됐다!

depno2 파티션 테이블

 

이제 원하는 대로 데이터를 검색해보면 된다. 

빅데이터를 넣으면 각각의 파티션에서만 빠르게 찾아보기 때문에 속도가 훨씬 빠를 것이다.