Hive 具有多个LIKE运算符的配置单元查询

Hive 具有多个LIKE运算符的配置单元查询,hive,sql-like,Hive,Sql Like,使用多个LIKE运算符编写配置单元查询的正确方法是: SELECT * FROM some_table WHERE some_col LIKE '%abc%' OR some_col LIKE '%xyz%' OR some_col LIKE '%pqr%' OR ... (some more LIKE statements) SELECT * FROM some_table WHERE some_col LIKE '%abc%' UNION SELECT * FROM some_table

使用多个LIKE运算符编写配置单元查询的正确方法是:

SELECT * 
FROM some_table
WHERE
some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%'
OR
... (some more LIKE statements)
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%'
我也试着做了上述的工作

WHERE some_col LIKE '%abc|pqr|xyz%' 
但他们没有返回任何结果。如果我编写单独的查询,也就是

WHERE some_col LIKE '%abc%' -> returns results


如果必须像这样在
中使用多个条件,您可以尝试使用
UNION

SELECT * 
FROM some_table
WHERE
some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%'
OR
... (some more LIKE statements)
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%'
您可能可以使用rlike(正则表达式)

从文档中:

A像B一样

如果A或B为NULL,则为NULL;如果A的任何子字符串(可能为空),则为TRUE 匹配Java正则表达式B,否则为FALSE。例如 “foobar”RLIKE“foo”的计算结果为TRUE,“foobar”RLIKE的计算结果也是TRUE “^f.*r$”


A正则表达式B

和RLIKE一样

所以,使用

WHERE some_col RLIKE 'abc|pqr|xyz' 

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

其中InStr(一些列,'abc')+InStr(一些列,'pqr')+…>0


我认为问题可能是您需要将类似的语句分组。你的例子是:

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

这是我尝试过的,但没有得到结果。你是不是建议我试着用一些类似于“%abc | pqr | xyz%”的列来表示正则表达式。很抱歉输入错误。我已经编辑了答案。对我不起作用。我想应该是这样的:像“abc | pqr | xyz”这样的人感谢你的指点。早些时候,我尝试了
列RLIKE'*abc*'或列RLIKE'*pqr*'或列RLIKE'*xyz*'
,但这对处理来说非常繁重。然而,如果我把上面提到的int-eh解决方案放进去,它就可以正常工作了。对此的任何解释都会有所帮助吗?没有充分的理由说明Hive无法处理由或组合的多个类似表达式。请详细说明表类型(外部与托管、分区与否、文本与RCFile与Orc与其他内容)和列定义(纯字符串?其中有空值吗?
其中一些类似“abc | pqr | xyz”的行。好的,但这可能需要比使用ORs的单个查询多4倍的资源——如果Hive在布尔表达式这样简单的问题上失败,那么它在任何问题上都可能失败:-/Thank@mattinbits!它可以工作并且能够编写干净的代码