Keep going.. Fantasio

(hive) 조인 관련 tip 정리

|
  1. hive에서는 비 동등 조인은 유효하지 않은데 가장 큰 이유는 이런 종류의 조인을 맵리듀스로 구현하기 어렵기 때문이다.

  2. 조인 시 on 절에서 술어간에 or 사용을 지원하지 않고 있다.

  3. 세 개 혹은 그 이상의 테이블을 조인할 때 모든 on 절에서 같은 조인키를 사용한다면 하나의 맵리듀스 잡을 사용한다.

  4. hive는 쿼리의 마지막 테이블이 가장 크다고 가정한다. 따라서 조인 쿼리를 구성할 때 가장 큰 테이블이 가장 마지막에 오도록 해야 한다. -> 조인 최적화

    힌트 존재 - 어떤 테이블을 마지막으로 흘려보낼야 하는지 지정해준다.

      /*+ STREAMTABLE(alias) */
    
  5. 외부 조인 시 where 절에 파티션 필터를 추가하면 외부조인이 아니게 된다.
    • 처리 순서가 join 절을 평가하고 결과를 where 절로 전달하기 때문이다.
    • 파티션 조건을 on 절로 옮겨도 된다고 hive에서 이야기 하지만 실제로는 안됨
      • 외부 조인은 파티션 필터를 무시하기 때문 (내부 조인은 됨)
      • 위 문제를 해결할 다른 방법으로는 중첩쿼리를 만드는 방법이 있다.
  6. 왼쪽 세미 조인 (LEFT SEMI JOIN)
    • 오른쪽 테이블에서 on 절에 만족하는 레코드가 있을 경우 왼쪽 테이블의 레코드를 반환한다.
    • IN .. EXISTS 와 같다.
    • 오른쪽 세미 조인은 없다.

Comments