BigQueryでLIKE文の複数条件指定をORから正規表現に直す


概要

BigQueryでLIKE文の複数条件指定をORから正規表現に置き換えます。

事の発端

IN演算子のLIKE版はありませんか?という質問を受けたので調べました。

Address IN ('東京', '新潟', '香川')

素直にORを使えば良いと思いますが、正規表現があるよ!
というアンサーはイマイチな気もしています。
※ORと正規表現でどれくらい抽出速度が変わるのか?までは調べられておりません

SQL

ORで書く場合

SELECT * FROM
(
  SELECT '東京都XXX' AS Address
  UNION ALL
  SELECT '神奈川県XXX' AS Address
  UNION ALL
  SELECT '新潟県XXX' AS Address
  UNION ALL
  SELECT '香川県XXX' AS Address
)
WHERE
  Address LIKE '東京%'
  OR Address LIKE '新潟%'
  OR Address LIKE '香川%'

正規表現で書く場合

BigQueryで正規表現を書くとき REGEXP_CONTAINS が使えます。

REGEXP_CONTAINS(value, regexp)
説明
value が正規表現 regexp に対して部分一致である場合、TRUE を返します。
regexp の引数が無効な場合は、関数はエラーを返します。

公式ドキュメントより引用
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators?hl=ja#regexp_contains

SELECT * FROM
(
  SELECT '東京都XXX' AS Address
  UNION ALL
  SELECT '神奈川県XXX' AS Address
  UNION ALL
  SELECT '新潟県XXX' AS Address
  UNION ALL
  SELECT '香川県XXX' AS Address
)
WHERE
  REGEXP_CONTAINS(Address, r'^(東京|新潟|香川)')