Join — Hive 방언

Join — Hive 방언

Hive 방언의 JOIN은 조인 조건에 따라 두 관계의 행을 결합하는 데 사용합니다. INNER, LEFT, RIGHT, FULL, LEFT SEMI, CROSS 등 다양한 조인 유형을 지원합니다.

출처: 문서

본문

설명 (Description)

JOIN은 조인 조건(join condition)에 기반하여 두 관계의 행을 결합하는 데 사용합니다.

문법 (Syntax)

Hive 방언은 테이블을 조인하는 다음 문법을 지원합니다:

join_table:
    table_reference [ INNER ] JOIN table_factor [ join_condition ]
  | table_reference { LEFT | RIGHT | FULL } [ OUTER ] JOIN table_reference join_condition
  | table_reference LEFT SEMI JOIN table_reference [ ON expression ] 
  | table_reference CROSS JOIN table_reference [ join_condition ]
 
table_reference:
    table_factor
  | join_table
 
table_factor:
    tbl_name [ alias ]
  | table_subquery alias
  | ( table_references )
 
join_condition:
    { ON expression | USING ( colName [, ...] ) }

조인 유형 (JOIN Type)

INNER JOIN

INNER JOIN은 조인 양쪽 모두에서 일치하는 행을 반환합니다. INNER JOIN이 기본 조인 유형입니다.

LEFT JOIN

LEFT JOIN은 왼쪽 조인 측의 모든 행과 오른쪽 조인 측의 일치하는 값을 반환합니다. 양쪽의 값을 연결(concat)합니다. 오른쪽 조인 측에 일치하는 값이 없으면 NULL 값을 추가합니다. LEFT JOINLEFT OUTER JOIN과 동일합니다.

RIGHT JOIN

RIGHT JOIN은 오른쪽 조인 측의 모든 행과 왼쪽 조인 측의 일치하는 값을 반환합니다. 양쪽의 값을 연결(concat)합니다. 왼쪽 조인 측에 일치하는 값이 없으면 NULL 값을 추가합니다. RIGHT JOINRIGHT OUTER JOIN과 동일합니다.

FULL JOIN

FULL JOIN은 양쪽 조인 측의 모든 행을 반환합니다. 양쪽의 값을 연결(concat)합니다. 한쪽이 행과 일치하지 않으면 NULL 값을 추가합니다. FULL JOINFULL OUTER JOIN과 동일합니다.

LEFT SEMI JOIN

LEFT SEMI JOIN은 오른쪽 조인 측에 일치하는 값이 있는 왼쪽 조인 측의 행을 반환합니다. 오른쪽 측의 값은 연결하지 않습니다.

CROSS JOIN

CROSS JOIN은 두 조인 측의 카테시안 곱(Cartesian product)을 반환합니다.

예시 (Examples)

-- INNER JOIN
SELECT t1.x FROM t1 INNER JOIN t2 USING (x);
SELECT t1.x FROM t1 INNER JOIN t2 ON t1.x = t2.x;

-- LEFT JOIN
SELECT t1.x FROM t1 LEFT JOIN t2 USING (x);
SELECT t1.x FROM t1 LEFT OUTER JOIN t2 ON t1.x = t2.x;

-- RIGHT JOIN
SELECT t1.x FROM t1 RIGHT JOIN t2 USING (x);
SELECT t1.x FROM t1 RIGHT OUTER JOIN t2 ON t1.x = t2.x;

-- FULL JOIN
SELECT t1.x FROM t1 FULL JOIN t2 USING (x);
SELECT t1.x FROM t1 FULL OUTER JOIN t2 ON t1.x = t2.x;

-- LEFT SEMI JOIN
SELECT t1.x FROM t1 LEFT SEMI JOIN t2 ON t1.x = t2.x;

-- CROSS JOIN
SELECT t1.x FROM t1 CROSS JOIN t2 USING (x);

더 알아보기 (Learn more)