使用多个LIKE运算符进行Hive查询

时间:2015-11-10 09:25:15

标签: hive sql-like

使用多个LIKE运算符编写Hive查询的正确方法是什么:

SELECT * 
FROM some_table
WHERE
some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%'
OR
... (some more LIKE statements)

我尝试过以上以及

WHERE some_col LIKE '%abc|pqr|xyz%' 

但他们没有返回任何结果。如果我编写单独的查询,即

,它可以正常工作
WHERE some_col LIKE '%abc%' -> returns results

WHERE some_col LIKE '%pqr%' -> also returns results

5 个答案:

答案 0 :(得分:14)

来自文档:

  

RLIKE B

     

如果A或B为NULL,则为NULL;如果为A的任何(可能为空)子字符串,则为TRUE   匹配Java正则表达式B,否则为FALSE。例如,   'foobar'RLIKE'foo'评价为TRUE,'foobar'RLIKE也是如此   '^ F。* R $'。

           

REGEXP B

     

与RLIKE相同。

所以,使用

WHERE some_col RLIKE 'abc|pqr|xyz' 

答案 1 :(得分:8)

你可以使用rlike(regular_expression)。

WHERE some_col RLIKE '*abc*|*pqr*|*xyz*' 

答案 2 :(得分:2)

我认为问题可能是您需要对类似声明进行分组。你的例子完成了:

SELECT * 
FROM some_table
WHERE
(some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%')

答案 3 :(得分:1)

如果您必须在UNION中使用多个条件,则可以尝试使用LIKE

SELECT * FROM some_table WHERE some_col LIKE '%abc%'
UNION
SELECT * FROM some_table WHERE some_col LIKE '%xyz%'
UNION
SELECT * FROM some_table WHERE some_col LIKE '%pqr%'

答案 4 :(得分:0)

如果你只需要检查特定子串的列表,你可以使用不同的方法,例如。

WHERE InStr(some_col, 'abc') +InStr(some_col, 'pqr') +... >0

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