web-dev-qa-db-fra.com

Requête Hive avec plusieurs opérateurs LIKE

Quelle serait la bonne façon d'écrire une requête Hive avec plusieurs opérateurs LIKE comme ceci:

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

J'ai essayé de faire ce qui précède, ainsi que

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

mais ils n'ont pas donné de résultat. Cela fonctionne bien si j'écris des requêtes séparées, c'est-à-dire.

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

et

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

De la docs:

A RLIKE B 

NULL si A ou B est NULL, TRUE s'il existe une sous-chaîne (éventuellement vide) de A correspond à l'expression régulière Java B, sinon FALSE. Par exemple, 'foobar' RLIKE 'foo' est évalué à VRAI, tout comme 'foobar' RLIKE '^ f. * r $'.


A REGEXP B 

Identique à RLIKE.

Alors, utilisez 

WHERE some_col RLIKE 'abc|pqr|xyz' 
13
mattinbits

Vous pouvez probablement utiliser rlike (regular_expression).

WHERE some_col RLIKE '*abc*|*pqr*|*xyz*' 
7
Shivanand Pawar

Je crois que le problème peut être que vous devez regrouper la déclaration similaire Votre exemple fait:

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

Vous pouvez essayer d'utiliser UNION si vous devez utiliser plusieurs conditions dans LIKE comme ceci:

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%'
1
Rahul Tripathi