2016-06-28 6 views
0

JOIN을 사용하여 LATERAL VIEW가있는 거대한 테이블을 필터링하려고한다고 가정합니다. 예 :하이브의 측면보기를 필터링하는 방법은 무엇입니까?

SELECT things.* 
FROM a_few_objects fo join 
(SELECT an_id, 
     object.id as object_id, 
     object.big_thing 
    FROM big_table 
    LATERAL VIEW EXPLODE(outer_things) ot AS outer_thing 
    LATERAL VIEW EXPLODE(objects) o AS object) things 
ON fo.objectid = things.object_id 

(I 디스크에 그림을 그리 듯 거대한 테이블을 생각)은 "일"하위 쿼리를 이렇게보다 인스턴스화하는보다 효율적인 방법이 있나요?

내부 쿼리의 WHERE 절에 a_few_objects의 행을 넣을 수 있지만 하이브에서 a_few_objects를 지정하려고하므로 쿼리를 항상 변경할 필요가 없습니다.

서브 쿼리 내부에 조인을 넣으면 하이브가 혼란스러워집니다. 하이브 0.13을 사용하고 있습니다.

+0

안녕하세요. 아무튼 해결책이 있으십니까? –

답변

0

하이브 0.13은 CTE (공통 표 식)입니다.

WITH q1 AS ( 
    SELECT an_id, 
     object.id AS object_id, 
     object.big_thing 
    FROM big_table 
    LATERAL VIEW EXPLODE(outer_things) ot AS outer_thing 
    LATERAL VIEW EXPLODE(objects) o AS object) 

SELECT * 
FROM q1 
JOIN big_table fo 
ON q1.objectid = fo.object_id 
+0

고맙지 만, 여전히 거대한 측면보기를 구현합니다. 나는 피할 수 없다고 생각합니다. – dfrankow

+0

지금 전화하시는 분은 –

+0

입니다. 나는 그것이 당신의 CTE와 같다고 생각합니다. – dfrankow

관련 문제