如何在hive中基于字符串进行过滤

时间:2017-02-01 08:30:35

标签: hive

所以,我有一个关于以下架构的表

user_id int,
movie_id int,
score   float,
demography string

人口统计是逗号分隔的字符串 比如'm,22,ca,.....'。这可能包含可变数量的元素。

现在,我想基于某些特征来过滤记录...... 如果人口统计学是" m"或来自" ca"等等.. 所以,目前我正在做的是......

将字符串拆分为数组(split(table.demography, "\\,")),然后将explode拆分并使用where子句进行过滤..

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

但是,爆炸导致记录......好......爆炸......我试图避免这种情况,因为它似乎膨胀了记录的数量..

有没有办法可以在不爆炸记录的情况下做到这一点?

1 个答案:

答案 0 :(得分:1)

尝试使用:

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

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

  

int find_in_set(string str,string strList)返回第一个   strList中str的出现,其中strList是逗号分隔的字符串。   如果任一参数为null,则返回null。如果是第一个,则返回0   参数包含任何逗号。例如,find_in_set(' ab',   ' abc,b,ab,c,def')返回3.