web-dev-qa-db-ja.com

複数のLIKE演算子を使用したHiveクエリ

次のような複数のLIKE演算子を使用してHiveクエリを記述する正しい方法は何でしょうか。

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

ドキュメントから:

RLIKE B

AまたはBがNULLの場合はNULL、Aのサブストリング(空の場合もある)がJava正規表現Bと一致する場合はTRUE、そうでない場合はFALSEです。たとえば、 'foobar' RLIKE 'foo'はTRUEと評価されます。そして 'foobar' RLIKE '^ f。* r $'もそうです。


REGEXP B

RLIKEと同じです。

したがって、使用

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

おそらくrlike(regular_expression)を使用できます。

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

問題は、likeステートメントをグループ化する必要があることだと思います。あなたの例が完了しました:

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

次のように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%'
1
Rahul Tripathi

特定の部分文字列のリストを確認するだけでよい場合は、別の方法を使用できます。

WHERE InStr(some_col, 'abc') +InStr(some_col, 'pqr') +... >0

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