2014-09-03 2 views
1

하이브에서 ARRAY_CONTAINS 함수를 사용하여 배열 열에서 여러 항목을 검색하는 편리한 방법이 있습니까? 그래서보다는 :ARRAY_CONTAINS 하이브의 다중 값

WHERE ARRAY_CONTAINS(array, val1) OR ARRAY_CONTAINS(array, val2) 

내가 쓰고 싶습니다

WHERE ARRAY_CONTAINS(array, val1, val2) 

전체 문제는 내가 일반적으로 스크립트를 실행하고 나는 때 명령 행 인수에서 동적으로 val1val2를 읽을 필요가있다 얼마나 많은 가치들이 조건 지어 질지 모른다. 그래서 당신은 valsval1, val2, ...를 포함하는 쉼표로 구분 된 목록 (또는 배열) 것을 생각할 수, 나는 사전에

WHERE ARRAY_CONTAINS(array, vals) 

감사를 쓰고 싶어요!

답변

1

UDF here을 사용하면 두 개의 배열을 교차시킬 수 있습니다. 당신의 가치는 구조

values_array = [val1, val2, ..., valn] 

는 한 가정 그런 다음

where array_intersection(array, values_array)[0] is not null 

할 수있는 공통점의 모든 요소가없는 경우, []가 반환됩니다 따라서 [][0]null

+0

나는 것 발전기와 같은 보트에서, 이것이 여전히 가장 좋은 해결책입니까? – blueskin

+0

예. 이것이 최선의 방법이라고 생각합니다. – gobrewers14