2017-02-10 11 views
0

Apache Impala를 테스트 중이며 GROUP BY와 LIKE를 함께 사용하면 매우 느리게 작동합니다. 별도의 쿼리가 훨씬 빠르게 작동합니다. 대안이있는 경우Group By and Like를 사용하는 임팔라 쿼리의 성능이 느림

# 1.37s 1.08s 1.35s 

SELECT * FROM hive.default.pcopy1B where 
    (lower("by") like '%part%' and lower("by") like '%and%' and lower("by") like '%the%') 
    or (lower(title) like '%part%' and lower(title) like '%and%' and lower(title) like '%the%') 
    or (lower(url) like '%part%' and lower(url) like '%and%' and lower(url) like '%the%') 
    or (lower(text) like '%part%' and lower(text) like '%and%' and lower(text) like '%the%') 
limit 100; 

# 156.64s 155.63s 

select "by", type, ranking, count(*) from pcopy where 
    (lower("by") like '%part%' and lower("by") like '%and%' and lower("by") like '%the%') 
    or (lower(title) like '%part%' and lower(title) like '%and%' and lower(title) like '%the%') 
    or (lower(url) like '%part%' and lower(url) like '%and%' and lower(url) like '%the%') 
    or (lower(text) like '%part%' and lower(text) like '%and%' and lower(text) like '%the%') 
group by "by", type, ranking 
order by 4 desc limit 10; 

누군가가이 문제가 발생하는 이유를 설명하고, 시겠어요 : 여기에 두 가지 예?

+0

두 개의 쿼리는 나에게 매우 다른 것처럼 보입니다. 첫 번째는 레코드를 선택하고 하나의 커서 만 필요하며 두 번째는 모든 레코드를 검색하고 GROUP과 SORT를 모두 실행해야합니다. 반환되는 레코드가 너무 많으면 시간의 차이를 설명 할 수 있습니다. 또는 나는 무엇인가 놓쳤 느냐? – LSerni

답변

1

2 개의 쿼리 사이에는 기본적인 차이점이 있습니다.

1 쿼리

주요 포인트 : 만 100 개의 행이 선택

  • .
  • 제공된 WHERE 절을 만족하는 100 개의 행을 가져 오면 완료된 것으로 표시되고 100 개의 레코드가 반환됩니다.
  • 매퍼 단계는 단 하나입니다. 매퍼의 수는 데이터 크기에 따라 다릅니다.

2 쿼리

주요 포인트 : 만 10 행을 선택

  • .
  • 단 10 개의 행만 선택하더라도 GROUP BY 절을 기반으로 결과를 생성하려면 전체 데이터를 검색해야합니다.
  • 3 개의 매퍼 - 감속기 단계가 있어야합니다. 각 단계의 매퍼 - 감속기의 수는 데이터 크기에 따라 다릅니다.
    • 1 MP는 데이터를 읽고
    • 2 MR은 GROUP BY 절위한 것 WHERE 조항을 적용합니다.
    • 세 번째 MR은 ORDER BY 절입니다.

그래서 당신에 의해 제공되는 쿼리는 유사 할 수 있지만 완전히 다른이며, 모두 함께 서로 다른 목적을 해결합니다.

이 정보가 도움이되기를 바랍니다.