You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中使用LIKE匹配多模式(含动态模式)的实现方法

BigQuery多模式LIKE匹配的简化实现

一、直接用数组简化写法

BigQuery不支持LIKE IN语法,但可以通过正则表达式实现等价的简洁写法:

方式1:使用REGEXP_CONTAINS结合数组转正则

SELECT description
FROM mytable
WHERE REGEXP_CONTAINS(mycol, ARRAY_TO_STRING(["window", "door", "carpet"], "|"))

ARRAY_TO_STRING会将数组元素用|拼接成正则表达式(window|door|carpet),REGEXP_CONTAINS会检查mycol是否包含任意一个目标子串,效果和多个OR LIKE完全一致。

方式2:使用REGEXP_UNION函数(BigQuery 2023+版本支持)

如果你的BigQuery版本支持该函数,写法更直观,还能自动处理正则特殊字符转义:

SELECT description
FROM mytable
WHERE REGEXP_CONTAINS(mycol, REGEXP_UNION(["window", "door", "carpet"]))

二、模式存储在另一张表的动态实现

如果匹配模式是动态生成并存储在另一张表(示例表名为pattern_table,含pattern字段),推荐两种最优实现:

方式1:用EXISTS关联检查(最安全,无正则转义风险)

这种方式完全贴合原始LIKE逻辑,无需处理正则特殊字符(比如模式含.、*时不会出错):

SELECT t.description
FROM mytable t
WHERE EXISTS (
  SELECT 1
  FROM `your-project.your-dataset.pattern_table` p
  WHERE t.mycol LIKE CONCAT("%", p.pattern, "%")
)

方式2:预生成正则表达式(性能更优,适合大量模式)

如果模式数量较多,先合并所有模式为一个正则表达式,再做单次匹配,性能更高效:

WITH aggregated_patterns AS (
  SELECT ARRAY_TO_STRING(ARRAY_AGG(pattern), "|") AS regex_pattern
  FROM `your-project.your-dataset.pattern_table`
)
SELECT t.description
FROM mytable t
CROSS JOIN aggregated_patterns p
WHERE REGEXP_CONTAINS(t.mycol, p.regex_pattern)

若模式中包含+、?这类正则特殊字符,可添加REGEXP_ESCAPE转义:

WITH aggregated_patterns AS (
  SELECT ARRAY_TO_STRING(ARRAY_AGG(REGEXP_ESCAPE(pattern)), "|") AS regex_pattern
  FROM `your-project.your-dataset.pattern_table`
)
SELECT t.description
FROM mytable t
CROSS JOIN aggregated_patterns p
WHERE REGEXP_CONTAINS(t.mycol, p.regex_pattern)

内容的提问来源于stack exchange,提问作者Galuoises

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:29:55