2017-02-22 2 views
1

하이브 데이터베이스에서 작동하는 scala/spark 패키지가 있습니다. 일부 특정 값에 대한 데이터가 있는지 확인하기 위해 쿼리가 실행되는 루프를 실행합니다.Hive- 데이터를 더 빨리 확인하는 방법

SELECT * FROM myTable WHERE col1 = 7879 AND col2= 1071 AND col3= 3027 LIMIT 1; 

그런 다음 행을 반환하는지 여부에 따라 진행하십시오. 실행에 약 25 초가 걸립니다.

나는이 방법이 있는지 여부 횟수에 따라

SELECT COUNT(*) FROM myTable WHERE col1 = 7879 AND col2= 1071 AND col3= 3027; 

진행하기보다 빠른

0 데이터가 테이블에 존재하는지 확인하는 빠른 방법이 있나요이다 작동 보았다 특정 제약 조건?

EDIT - 루프는 다른 쿼리의 결과 행을 기반으로 실행되므로 100 개 이상의 행이 생성됩니다.

답변

0

루프를 버립니다.
모든 쿼리를 단일 쿼리로 수행하십시오.

쿼리를 작성하는 방법은 다양합니다.이 방법은 result_set_of_another_query를 (col1, col2, col3)의 고유 한 조합으로 가정합니다.

select  q.col1 
      ,q.col2 
      ,q.col3 
      ,t.cnt 

from     result_set_of_another_query as q 

      join  (select  col1 
            ,col2 
            ,col3 
            ,count(*) as cnt 

         from  mytable 

         group by col1 
            ,col2 
            ,col3 
         ) t 

      on   t.col1 = q.col1 
        and t.col2 = q.col2 
        and t.col3 = q.col3 
; 
+0

업데이트 된 답변 확인 –

0

테이블이 파티션 된 경우 where clasue를 사용할 수없는 경우. 각 파티션에 적절한 데이터가 있는지 확인하기 위해 테이블에서 카운트 (*) 만 실행할 수 있습니다. 여러 테이블을 체크인하려는 경우 유니온을 모두 사용할 수도 있습니다.

관련 문제