2014-09-14 4 views
1

두 테이블 A와 B는 모두 다음과 같은 구조를 가지고 있습니다.HIVE에서 두 테이블을 결합하는 방법.

// Table A 

Name Age actualdate no 

// Table B 

City sdate edate   id 

나는 경우, ID = 아니오 그리고 sdate < = actualdate 및 EDATE> = actualdate 가입하여 A 및 B로부터의 모든 필드를 획득하기 바란다.

where 절을 사용하여 다음과 같이 시도했지만 작동하지 않습니다.

select v3.*, t3.* from A v3 
JOIN 
B t3 
where v3.id = t3.no and 
     v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

절에 사용 :

select v3.*, t3.* from A v3 
    JOIN 
    B t3 
    ON (v3.id = t3.no and 
      v3.sdate <= t3.actualdate and 
      v3.edate >= t3.actualdate) 
    limit 1; 

불행하게도, 하이브가 동등 조인을 지원하지 않습니다. 거기 조인을 사용하여 위의 달성 방법이 있습니까?

+0

참여를 시도 할 때 발생하는 오류는 무엇입니까? –

+0

"ON"절을 사용하면 오류가 발생합니다 : FAILED : 의미 분석의 오류 : 줄 JOIN 'actualdate'에서 왼쪽 및 오른쪽 별칭이 모두 발생했습니다. 그리고 "WHERE"절을 사용할 때 오류가 발생하지 않지만 어떤 결과도 얻지 못합니다. 그러나 ""v3.sdate <= t3.actualdate 및 v3.edate> = t3.actualdate "부분을"ON "절에서 제거하면 조건 확인없이 작동합니다. – Ronak

답변

6

ON 절 안에 < = 및> = 조건을 사용하는 대신 WHERE를 사용하여 필터링을 수행 할 수 있습니다.

select v3.*, t3.* from A t3 
JOIN 
B v3 
ON (v3.id = t3.no) 
WHERE v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

참고 : t3 및 v3 별칭이 변경되었습니다.

관련 문제