【BigQuery基礎】LIKEを使ってあいまい検索(サンプルクエリ付き)

BigQuery

BigQuery(BQ) の条件句で、ワイルドカードを使ったパターンマッチ(部分一致など)によるあいまい検索は LIKE を用います。

こちらの記事では BigQuery 初心者向けに LIKE の使い方を解説します!

LIKEとは

SQL における LIKE というのは、文字通り「〜のような」という曖昧な条件にマッチするかを判定することが可能です。

WHERE などの条件句では完全一致の「=」や複数一致の「IN」などを使用するケースが多いですが、LIKEを使うことで条件指定の手間を減らすことができます。

LIKEの使い方

実際のLIKEの使い方を解説していきます。

ワイルドカードの種類

種類は「%」と「_」の2つです。

種類説明
% (パーセント記号)任意の0文字以上の文字列と一致します。
_ (アンダースコア)任意の1文字の文字列と一致します。

例えば、 Analysis という文字に対して、

'%sis'
'%Analysis%'
'_nalysis'

は一致しますが、

'_sis'

は一致しません。

「_」 または「%」は、2 つのバックスラッシュを使用してエスケープできます

サンプルクエリ

実際のクエリで見てみましょう。

使用するデータ

WITH 

data AS (
    SELECT 1 AS id, "東京都渋谷区" AS name 
    UNION ALL
    SELECT 2 AS id, "東京都港区" AS name 
    UNION ALL
    SELECT 3 AS id, "神奈川県横浜市" AS name 
    UNION ALL
    SELECT 4 AS id, "東京都世田谷区" AS name 
    UNION ALL
    SELECT 5 AS id, "埼玉県浦和市" AS name 
)

SELECT * FROM data

実行結果は以下です。

東京都だけ抜き出す

WITH 

data AS (
    SELECT 1 AS id, "東京都渋谷区" AS name 
    UNION ALL
    SELECT 2 AS id, "東京都港区" AS name 
    UNION ALL
    SELECT 3 AS id, "神奈川県横浜市" AS name 
    UNION ALL
    SELECT 4 AS id, "東京都世田谷区" AS name 
    UNION ALL
    SELECT 5 AS id, "埼玉県浦和市" AS name 
)

SELECT 
    * 
FROM 
    data 
WHERE 
    name LIKE '東京都%'

実行結果は以下です。東京都のみ抽出することができました!

LIKEで複数条件を指定して抽出する

OR を使えば複数のLIKEいずれかに該当するレコードのみを抽出することができます。

WITH 

data AS (
    SELECT 1 AS id, "東京都渋谷区" AS name 
    UNION ALL
    SELECT 2 AS id, "東京都港区" AS name 
    UNION ALL
    SELECT 3 AS id, "神奈川県横浜市" AS name 
    UNION ALL
    SELECT 4 AS id, "東京都世田谷区" AS name 
    UNION ALL
    SELECT 5 AS id, "埼玉県浦和市" AS name 
)

SELECT 
    * 
FROM 
    data 
WHERE 
    name LIKE '東京都%'
    OR 
    name LIKE '神奈川県%'

特定条件だけ抜き出さない(NOT LIKE)

NOT LIKE を用いることで、パターンマッチしないレコードのみを抽出することも可能です。

WITH 

data AS (
    SELECT 1 AS id, "東京都渋谷区" AS name 
    UNION ALL
    SELECT 2 AS id, "東京都港区" AS name 
    UNION ALL
    SELECT 3 AS id, "神奈川県横浜市" AS name 
    UNION ALL
    SELECT 4 AS id, "東京都世田谷区" AS name 
    UNION ALL
    SELECT 5 AS id, "埼玉県浦和市" AS name 
)

SELECT 
    * 
FROM 
    data 
WHERE 
    name NOT LIKE '東京都%'

LIKEはこのように一定の規則性のあるデータから特定の要素が当てはまるデータのみを抜き出したり、レコード内容が不確かな場合にLIKEを用いて抽出して検証する場合などに用いられます。

正規表現でも同様のことは可能

BigQuery では正規表現は REGEXP_CONTAINS を用います。

WITH 

data AS (
    SELECT 1 AS id, "東京都渋谷区" AS name 
    UNION ALL
    SELECT 2 AS id, "東京都港区" AS name 
    UNION ALL
    SELECT 3 AS id, "神奈川県横浜市" AS name 
    UNION ALL
    SELECT 4 AS id, "東京都世田谷区" AS name 
    UNION ALL
    SELECT 5 AS id, "埼玉県浦和市" AS name 
)

SELECT 
    * 
FROM 
    data 
WHERE 
    REGEXP_CONTAINS(name, r'^(東京|神奈川)')

このように LIKE のパターンマッチを IN演算子のように複数指定したい場合、正規表現を用いることで一文で書くことができます

まとめ

こちらの記事では、

  • BigQuery における LIKE とは
  • LIKE の基本的な使い方、サンプルクエリ

について解説しました。

LIKE は意外と簡単に使えるので、是非 BigQuery を使用する際は活用してみてください!

この記事を読んでいる人におすすめの記事

コメント

タイトルとURLをコピーしました