2014-09-03 4 views
1

Есть ли удобный способ использования функции ARRAY_CONTAINS в улье для поиска нескольких записей в столбце массива, а не только одного? Таким образом, вместо:ARRAY_CONTAINS muliple values ​​in hive

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

Я хотел бы написать:

WHERE ARRAY_CONTAINS(array, val1, val2) 

Полная проблема в том, что мне нужно прочитать val1 и val2 динамически из аргументов командной строки при запуске сценария, и я в целом не знаю, сколько значений будет обусловлено. Таким образом, вы можете думать о vals быть разделенный запятыми список (или массив), содержащий значения val1, 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