2017-02-01 50 views
0

串所以,我有以下模式如何篩選基於在蜂巢

user_id int, 
movie_id int, 
score float, 
demography string 

的表的人口是一個逗號分隔的字符串 像'm,22,ca,.....'。這可以包含可變數量的元素。

現在,我要基於某些characterstics篩選記錄... 是,如果人口是「M」或從「CA」等等等等。 所以,目前我在做什麼是..

的字符串分割成數組(split(table.demography, "\\,"))然後explode它,做過濾..使用WHERE子句..

Where exploded_demography = 'm' or exploded_demography='ca' (etc etc) 

但是,爆炸原因記錄..好..爆炸..我想避免因爲它似乎臃腫的記錄數量..

有沒有辦法在不爆炸記錄的情況下做到這一點?

回答

1

嘗試使用:

find_in_set('ca', table.demography) > 0 

來自:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions

INT FIND_IN_SET(字符串str,串strList)返回第一 一次出現在strList STR的其中strList是逗號分隔的字符串。 如果任一參數爲null,則返回null。如果第一個參數 包含任何逗號,則返回0。例如,find_in_set('ab', 'abc,b,ab,c,def')返回3.