BigQuery(BQ) の条件句で、ワイルドカードを使ったパターンマッチ(部分一致など)によるあいまい検索は LIKE を用います。
こちらの記事では BigQuery 初心者向けに LIKE の使い方を解説します!
LIKEとは
SQL における LIKE というのは、文字通り「〜のような」という曖昧な条件にマッチするかを判定することが可能です。
WHERE などの条件句では完全一致の「=」や複数一致の「IN」などを使用するケースが多いですが、LIKEを使うことで条件指定の手間を減らすことができます。
LIKEの使い方
実際のLIKEの使い方を解説していきます。
ワイルドカードの種類
種類は「%」と「_」の2つです。
種類 | 説明 |
% (パーセント記号) | 任意の0文字以上の文字列と一致します。 |
_ (アンダースコア) | 任意の1文字の文字列と一致します。 |
例えば、 Analysis という文字に対して、
'%sis'
'%Analysis%'
'_nalysis'
は一致しますが、
'_sis'
は一致しません。
サンプルクエリ
実際のクエリで見てみましょう。
使用するデータ
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 '東京都%'
正規表現でも同様のことは可能
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 を使用する際は活用してみてください!
コメント