2015-11-10 32 views
3

什麼是寫有多個蜂房查詢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) 

我試圖做上述以及

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

但他們沒有返回任何結果。它工作正常,如果我寫單獨的查詢,即

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

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

Hive無法處理由OR組合的多個LIKE表達式時失敗。你能否詳細說明表類型(外部與管理,分區與否,文本與RCFile與Orc與其他)以及列定義(普通字符串?那裏有任何空值?) –

+0

WHERE some_col rlike' abc | pqr | xyz''的作品。 – r2d2oid

回答

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%' 
+0

好吧,但是這可能需要比使用ORs的單個查詢多4倍的資源 - 並且如果Hive在布爾表達式等某些操作上失敗,那麼它可能會在任何情況下失敗: -/ –

7

你可以使用rlike(regular_expression)。

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

這是我嘗試過的,但沒有得到結果。你是否建議我嘗試在哪裏some_col RLIKE'%abc | pqr | xyz%' – Shobit

+1

是的,試着用rlike來進行正則表達式。對不起,輸入錯誤。我編輯了答案。 –

+0

其中some_col RLIKE「%abc | pqr | xyz%」爲我工作 – user799188

8

從文檔:

甲RLIKE乙

NULL,如果A或B是NULL,TRUE,如果阿 的任何(可能爲空)子串的Java正則表達式乙相匹配,否則爲假。例如, 'foobar'RLIKE'foo'評估爲TRUE,'foobar'RLIKE '^ f。* r $'也是如此。


甲REGEXP乙

同RLIKE。

因此,使用

WHERE some_col RLIKE 'abc|pqr|xyz' 
0

我認爲,問題可能是你需要組類似聲明。您的示例已完成:

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