次のような複数の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
ドキュメントから:
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'
おそらくrlike(regular_expression)を使用できます。
WHERE some_col RLIKE '*abc*|*pqr*|*xyz*'
問題は、likeステートメントをグループ化する必要があることだと思います。あなたの例が完了しました:
SELECT *
FROM some_table
WHERE
(some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%')
次のように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%'
特定の部分文字列のリストを確認するだけでよい場合は、別の方法を使用できます。
WHERE InStr(some_col, 'abc') +InStr(some_col, 'pqr') +... >0