Was wäre der richtige Weg, um eine Hive-Abfrage mit mehreren LIKE-Operatoren wie folgt zu schreiben:
SELECT *
FROM some_table
WHERE
some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%'
OR
... (some more LIKE statements)
Ich habe versucht, das oben genannte zu tun
WHERE some_col LIKE '%abc|pqr|xyz%'
aber sie haben keine Ergebnisse zurückgegeben. Es funktioniert gut, wenn ich separate Abfragen schreibe, d. H.
WHERE some_col LIKE '%abc%' -> returns results
und
WHERE some_col LIKE '%pqr%' -> also returns results
Aus den Dokumenten:
A RLIKE B
NULL, wenn A oder B NULL ist, TRUE, wenn eine (möglicherweise leere) Teilzeichenfolge von A Mit dem regulären Java-Ausdruck B übereinstimmt, andernfalls FALSE. Zum Beispiel wird 'Foobar' RLIKE 'foo' zu WAHR ausgewertet und 'foobar' RLIKE '^ F. * R $'.
A REGEXP B
Wie RLIKE.
Also verwenden
WHERE some_col RLIKE 'abc|pqr|xyz'
Sie können wahrscheinlich rlike (regular_expression) verwenden.
WHERE some_col RLIKE '*abc*|*pqr*|*xyz*'
Ich glaube, das Problem könnte sein, dass Sie die Like-Anweisung zusammenfassen müssen. Dein Beispiel ist fertig:
SELECT *
FROM some_table
WHERE
(some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%')
Sie können versuchen, UNION
zu verwenden, wenn Sie mehrere Bedingungen in LIKE
wie folgt verwenden müssen:
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%'
Wenn Sie lediglich nach einer Liste bestimmter Teilzeichenfolgen suchen, können Sie einen anderen Ansatz verwenden, z.
WHERE InStr(some_col, 'abc') +InStr(some_col, 'pqr') +... >0