Lateral View 절

Lateral View 절 (Lateral View Clause)

Lateral view 절은 explode() 같은 사용자 정의 테이블 생성 함수(UDTF)와 함께 사용됩니다.

출처: 문서

본문

설명 (Description)

Lateral view 절은 explode() 같은 사용자 정의 테이블 생성 함수(UDTF)와 함께 사용됩니다. UDTF 는 각 입력 행에 대해 0개 이상의 출력 행을 생성합니다.

Lateral view 는 먼저 base 의 각 행에 UDTF 를 적용한 다음 결과 출력 행을 입력 행과 조인해 제공된 테이블 별칭(alias)을 가진 가상 테이블을 형성합니다.

문법 (Syntax)

lateralView: LATERAL VIEW [ OUTER ] udtf( expression ) tableAlias AS columnAlias [, ... ]
fromClause: FROM baseTable lateralView [, ... ]

열 별칭은 생략할 수 있습니다. 이 경우 별칭은 UDTF 에서 반환된 StructObjectInspector 의 필드 이름에서 상속됩니다.

매개변수 (Parameters)

  • Lateral View Outer: 사용자는 일반적으로 LATERAL VIEW 가 행을 생성하지 않을 때에도 행을 생성하도록 선택적 OUTER 키워드를 지정할 수 있습니다. 이는 사용된 UDTF 가 어떤 행도 생성하지 않을 때 발생하며, 폭발시킬(explode) 열이 비어 있을 때 쉽게 발생합니다. 이 경우 소스 행은 결과에 전혀 나타나지 않습니다. OUTER 를 사용하면 이를 방지할 수 있으며, UDTF 에서 오는 열에 NULL 값이 있는 행이 생성됩니다.
  • Multiple Lateral Views: FROM 절은 여러 LATERAL VIEW 절을 가질 수 있습니다. 후속 LATERAL VIEW 는 해당 LATERAL VIEW 의 왼쪽에 나타나는 테이블 중 어느 테이블의 열도 참조할 수 있습니다.

예제 (Examples)

테이블이 하나 있다고 가정합니다:

CREATE TABLE pageAds(pageid string, addid_list array<int>);

그리고 테이블에 두 행이 포함되어 있습니다:

front_page, [1, 2, 3];
contact_page, [3, 4, 5];

이제 LATERAL VIEW 를 사용해 열 addid_list 를 별도의 행으로 변환할 수 있습니다:

SELECT pageid, adid FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;
-- result
front_page, 1
front_page, 2
front_page, 3
contact_page, 3
contact_page, 4
contact_page, 5

또한 테이블이 하나 있다면:

CREATE TABLE t1(c1 array<int>, c2 array<int>);

여러 lateral view 절을 사용해 열 c1c2 를 별도의 행으로 변환할 수 있습니다:

SELECT myc1, myc2 FROM t1
LATERAL VIEW explode(c1) myTable1 AS myc1
LATERAL VIEW explode(c2) myTable2 AS myc2;

UDTF 가 행을 만들지 않으면 LATERAL VIEW 도 행을 만들지 않습니다. LATERAL VIEW OUTER 를 사용하면 해당 열을 NULL 로 채워 여전히 행을 생성할 수 있습니다:

SELECT * FROM t1 LATERAL VIEW OUTER explode(array()) C AS a;

더 알아보기 (Learn more)