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

BigQuery中使用正则优化LIKE操作符提取URL内productid的方案咨询

你提到的需求在 BigQuery 中完全可以实现。

问题原因

你原有代码的报错根因是 LIKE '%-p%' 的匹配规则过于宽松:只要URL中出现任意-p字符就会进入第一个分支,但若这个-p后面没有紧跟数字和/,后续的REGEXP_EXTRACT会返回空值,也就出现了你遇到的-m开头ID的URL因为包含无关-p字符返回空的问题。

方案1:修复原有CASE WHEN逻辑

用 BigQuery 内置的 REGEXP_CONTAINS 函数替代 LIKE 做判断,直接匹配-p/m后接数字再加/的规则,同时优化提取逻辑,用正则捕获组直接拿到ID数字部分,省去REGEXP_REPLACE步骤:

CASE
   WHEN REGEXP_CONTAINS(MAX(hits.page.pagePath), r'-p\d+/') 
     THEN MAX(REGEXP_EXTRACT(hits.page.pagePath, r'-p(\d+)/'))                                
   WHEN REGEXP_CONTAINS(MAX(hits.page.pagePath), r'-m\d+/') 
     THEN MAX(REGEXP_EXTRACT(hits.page.pagePath, r'-m(\d+)/'))
   ELSE NULL            
END AS productId

方案2:简化为单条提取语句

因为两类ID仅前缀p/m不同,完全可以合并成一个正则提取语句,不需要写CASE WHEN,更简洁高效:

MAX(REGEXP_EXTRACT(hits.page.pagePath, r'-[pm](\d+)/')) AS productId

如果你的业务场景中存在同一个URL同时出现-p加数字和-m加数字的情况,可以根据优先级调整匹配规则,比如优先取p开头的ID可以调整为:

MAX(COALESCE(
  REGEXP_EXTRACT(hits.page.pagePath, r'-p(\d+)/'),
  REGEXP_EXTRACT(hits.page.pagePath, r'-m(\d+)/')
)) AS productId

内容的提问来源于stack exchange,提问作者Bendegúz Tunyogi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:51:00