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
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'
Vous pouvez probablement utiliser rlike (regular_expression).
WHERE some_col RLIKE '*abc*|*pqr*|*xyz*'
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%')
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%'