2016-07-16 4 views
0

오른쪽 테이블에서 몇 개의 열을 필요로하는 두 개의 테이블을 조인 할 필요가 있습니다. 세 개의 열과 세 개의 열의 조인 조건에서 두 개의 유사하지만 한 개의 다른 열 (다시 3 개의 열)과 몇 개의 열이 조인 조건에 포함됩니다. 하나의 열 (이전 조인에서 일치하지 않는 열 중 하나임)조인 수를 줄이는 방법은 무엇입니까?

날 예에서 설명하게

표 A는 열 A1, A4, A3, A2를 갖고 표 B는

지금 열 B1, B2, B3, B4, B5, B6, B7을 갖는다 A5 I

  • A1, A2
  • ,
  • A3, A4, B1
  • A2 = B2, B3 = A3, A4 = 필요 B4,
  • B6 때 A2 = B5, A3 = B3, A4 = B4,
  • B7 때 A2 = B2 나는 테이블에 여러 번 참여하지 않고이를 어떻게 지금

, 또는 작은 배 가능한 한. 구조 나 그 밖의 것들을 사용할 때. 쿼리는 Hive 용이지만 대부분의 SQL 기능이 지원됩니다. 하이브는 다른 최적화 기법을 가지고 있지만 SQL 사용자를 환영합니다.

미리 감사드립니다.

+0

샘플 데이터와 원하는 결과는 사람들이 원하는 것을 이해하는 데 도움이됩니다. –

답변

0

저는 hiveconditional aggregation을 지원합니다. 내가 제대로 질문을 이해하고있어 경우에 그것을 사용할 수 있어야 할 cross join :

여러 싶지
select a1, a2, a3, a4, 
     max(case when a2 = b2 and a3 = b3 and a4 = b4 then b1 end) b1, 
     max(case when a2 = b5 and a3 = b3 and a4 = b4 then b6 end) b6, 
     max(case when a2 = b2 then b7 end) b7 
from a cross join b 
group by a1, a2, a3, a4 
+0

안녕하세요, 재생 해 주셔서 감사합니다. 왼쪽 가입을해야합니다. 여기에 십자가 가입과 동일합니까? 왜 내가 max function을 사용해야하는지 알지 못한다. –

+0

@HimanshuMehra - 어떤 테이블을 '외부 조인'에서 사용해야합니까? 이것은'b'에 일치하는 값을 갖는'a'의 모든 결과를 반환해야합니다. 'max'는 기본적으로 테이블 피벗 (다중 조인의 대안) 인'조건부 집계 '와 함께 사용됩니다. – sgeddes

+0

@sgedds 저는 sql과 hive가 새로 생겨서 미안합니다. 그래서 테이블이 어떻게 그리고 왜 선회되고 있는지 이해하지 못하고 있습니다. max 함수 정의는 '그룹의 열의 최대 값을 반환합니다.' 그리고 만약 당신이 그것을 여러 열을 전달하면 특정 레코드에 대한 더 높은 가치를 반환합니다이 뜻을 짐작하겠습니다. 내가 맞습니까? 도와 줘서 고마워. 편집 :하지만 최대 기능은 단 하나의 값을 가지고 것 같다 –

0

조인 : 일부 조건이하지 않으면 당신은 left join을해야 할 수도 있습니다

select a.a1, a.a2, a.a3, a.a4, b1.b1, b2.b6, and b3.b7 
from a join 
    b b1 
    on a.a2 = b1.b2 and a.a3 = b1.b3 and a.a4 = b1.b4 join 
    b b2 
    on a.a2 = b2.b5 and a.a3 = b2.b3 and a.a4 = b2.b4 join 
    b b3 
    on a.a2 = b.b2; 

시합.

+0

하지만 OP는 구체적으로 말합니다 : '이제 여러 번 테이블에 가입하지 않고 어떻게 이것을 할 수 있습니까?' 나는 이것이 비록 효과가있을 것이라는 점에 동의한다. – sgeddes

+0

@sgeddes. . . 이것은 OP가 묘사하는 문제에 대한 최선의 해결책이라고 생각합니다. 특히 환경을 고려할 때 그렇습니다. –

+0

충분히 공정하게, 이것이 '교차 결합'보다 나은 성능을 낼 수 있다고 주장 할 수는 없습니다. 아마도 나는 질문을 문자 적으로 읽지 말아야한다 ... – sgeddes

관련 문제