webentwicklung-frage-antwort-db.com.de

Hive-Abfrage mit mehreren LIKE-Operatoren

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
5
Shobit

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' 
13
mattinbits

Sie können wahrscheinlich rlike (regular_expression) verwenden.

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

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%')
2
BalaramRaju

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

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

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions