2014-04-11 2 views
0

하이브 쿼리를 최적화하려고합니다. 아래 그림과 같이 기본 테이블을 ORC 파일로 분할하여 저장했습니다.하이브 쿼리 최적화

create table if not exists processed (
    plc string, 
    direction string, 
    table int, 
    speed float, 
    time string 
) PARTITIONED BY (time_id bigint) STORED AS ORC; 

위의 테이블 (500.000 레코드 포함)에서 아래의 쿼리가 실행됩니다. 최종 결과는 json으로 저장됩니다. 전체 거래에는 약 35 초가 걸립니다. 이 시간을 줄일 수있는 방법이 있습니까? 또는 누군가가 Hive 대신 다른 프레임 워크를 사용하여 나를 제안 할 수 있습니다. 다음 쿼리입니다.

String finalQuery = "select plc,direction,AVG(speed) as speed ,COUNT(plc) as count,time_id from processed WHERE plc IN " 
       + " " 
       + "(" 
       + plcCSV 
       + ")" 
       + " " + " " + "AND" + " " + "time_id =" + " " + time_id + " " 
       + "group by plc,direction,time_id"; 
+0

어디 조건에 따라 단순히 행 수를 공유하겠습니다. –

+0

@ZafarMalik .. where 조건의 In 절은 목록을 포함합니다. –

답변

0

먼저 plc 열에 인덱스를 만든 다음 시도해보십시오.

+0

나는 그것을 시도해 보았습니다 ... CREATE INDEX 하나의 테이블을 가공 (plc) 그대로 'COMPACT'와 DEFERRED REBUILD; –

+0

정수, varchar, 텍스트 등의 정확한 데이터 유형 및 길이. –

+0

plc를 문자열로 취했습니다. –