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 절을 사용해 열 c1 과 c2 를 별도의 행으로 변환할 수 있습니다:
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;