2012-06-28 3 views
0

하이브의 두 테이블에 왼쪽 외부 조인을하고 있습니다. 표 1에서하이브 : string이 NULL이면 변환 함수는 어떻게 작동합니까?

table 1 : name1 
table 2 : name2 , class (only two values Y or N) 

이름은 클래스, 2

최종 결과 테이블 이름 1이 있어야 테이블의 상위 집합

내 쿼리가

select table1.name1 , translate(table2.class,NULL,'N') 
from table1 left outer join table2 
on (name1= name2); 

이다이 일 것?

는 또한 reexp_replace을 시도하고 있지만

선택 table1.name1, REGEXP_REPLACE (table2.class을, NULL, 'N')의 표 외부 조인 왼쪽 표 2 에서 (이름 1 = NAME2) 작동하지 않습니다;

답변

1

Hive 번역 UDF를 작성할 때 PostGreSQL의 번역 UDF와 동일한 동작을 유지하려고했습니다. PostGreSQL과 유사하게 변환 UDF에 대한 인수가 NULL이면 결과는 NULL입니다.

이것은 또한 UDF에 대한 하이브 소스의 다음 줄에 표시됩니다 :

if (arguments[0].get() == null || arguments[1].get() == null || arguments[2].get() == null) { 
     return null; 
    } 

전체 소스는 here 사용할 수 있습니다.

귀하의 질문에서 이해 한대로, 이름이 table1에는 있지만 table2에는 존재하지 않을 때 'N'을 내고자합니다.

SELECT 
    table1.name1, 
    COALESCE(table2.name2, 'N') as name2 
FROM 
    table1 
    LEFT OUTER JOIN 
    table2 
    ON (table1.name1 = table2.name2); 

당신은 Hive UDF wiki page에 병합 UDF에 대해 자세히 알아볼 수 있습니다 : 내가 그 일을한다면, 난 (테스트되지 않은) 같은 것을 할 것입니다.

귀하의 질문에 감사드립니다. Hive UDF wiki page에 대한 번역 UDF의 설명을 업데이트하여 입력 매개 변수 중 하나가 NULL 인 경우를 명확히했습니다.

관련 문제