개발서버에서 40G 정도 넣어서 단순히 날짜 조건만 넣었는데도 시간이 꽤 오래걸렸다.

그래서 파티셔닝을 해야 하는데 문서는 아직 만들다 만것같다.(?!) 그나마 다행히 한국사용자 그룹에 관련 문의가 있었다. 

https://groups.google.com/forum/#!searchin/tajo-user-kr/external$20partition$20/tajo-user-kr/25dyqY60Scg/si1s051fm5kJ


create external table  문으로 파티셔닝하는 방법을 정리하겠다.

현재 타조가 0.10 까지만 나왔는데, 정리한 시점에 trunk 빌드해서 사용중이니 참고하자.


1. 폴더 구조를 규칙에 맞게 바꾸자.

주의할것은 파티셔닝할때 하위폴더를 필드명과 값으로 지정해야 한다.

즉 아래와 같이 데이터를 넣었다면 폴더를 필드명과 값을 통해 구분해야한다.

(구글그룹에 있는 글을 읽으면 아직 사용자가 임의의 폴더를 수동으로 맵핑하는 형태는 안되나보다)


* 파티셔닝전의 hdfs 폴더 구성 

/data/sample/20150101.data

/data/sample/20150102.data

/data/sample/20150103.data

/data/sample/20150104.data


* 파티셔닝하기위해 변경한 hdfs 폴더 구성 (= external 로 연결하는것이니 폴더는 사용자가 수동으로 맞춰줘야)

/data/sample/ymd=20150101/20150101.data

/data/sample/ymd=20150102/20150102.data

/data/sample/ymd=20150103/20150103.data

/data/sample/ymd=20150104/20150104.data




2. 생성문 예제

파티셔닝할때 날짜 필드는 ymd라고 가정했고, 탭단위로 구분된 파일이라고 가정한 샘플스크립트이다.

주의할것은, 필드명에 파티셔닝될 값이 있다고 해서 동일한 필드명 (예: ymd)로 하면 안된다는것이다.

파티셔닝 필드명과 동일하게 적용하면, 데이터 칸밀림(?)이 되어서 엉뚱한 필드에 값이 있게 된다 ㅜ

아래와 같이 충돌나지 않게 다른이름을 지정해줘야 한다.

참고로 Hive에서는 에러메시지를 출력한다. tajo도 그래야 하지 않을까 싶다.


partition by column 에서는 검색용도 필드로 쓰고, 보여줄땐 create문에 적힌 필드를 써야하려나보다.


create external table t_sample(

       _ymd   text,

       name text,

       cnt    int       

using text with ('text.delimiter'='\t') 

PARTITION BY COLUMN (ymd TEXT)

location  'hdfs://네임노드호스트:8020/data/sample'

;




데이터는 다르지만 저런형식으로 하면 단순히 날짜조건만 했을때 오래걸리지 않고  바로 결과가 나왔다.

+ Recent posts