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

在BigQuery中查询GA数据时,如何用模糊匹配排除指定站点?

解决BigQuery中GA数据排除多站点的问题

你遇到的Scalar subquery produced more than one element错误,根源在于你的子查询返回了多行结果,但LIKE操作符只能和单个值进行匹配,没法直接处理多个匹配模式。下面给你两种可行的解决方案,帮你精准排除目标站点:

方案一:使用NOT EXISTS关联子查询

这种方式会逐行检查当前处理后的URL是否存在于排除列表的匹配规则中,只有完全不匹配的记录才会被保留,逻辑清晰且性能不错:

SELECT DISTINCT 
  h.eventinfo.eventAction AS eventAction, 
  h.eventinfo.eventlabel AS eventlabel 
FROM `projectName.ga_sessions_*`, UNNEST(Hits) h 
WHERE _TABLE_SUFFIX BETWEEN "20190101" AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) 
  AND type = 'EVENT' 
  AND h.eventInfo.eventCategory = 'EventName'
  -- 核心:检查当前URL是否不在排除列表的匹配范围内
  AND NOT EXISTS (
    SELECT 1 
    FROM `projectName.datasetName.ExclusionList` el
    -- 用正则简化URL前缀清理,替代多次REPLACE
    WHERE REGEXP_REPLACE(h.eventInfo.eventLabel, r'^(https?://|www\.)', '') LIKE CONCAT(el.ThirdPartyURL, '%')
  )

方案二:使用LEFT JOIN + IS NULL过滤

通过左连接把主数据和排除列表关联,然后过滤掉匹配到排除项的记录,也是一种常用的排除逻辑:

SELECT DISTINCT 
  h.eventinfo.eventAction AS eventAction, 
  h.eventinfo.eventlabel AS eventlabel 
FROM `projectName.ga_sessions_*`, UNNEST(Hits) h 
-- 左连接排除列表,匹配规则和上面一致
LEFT JOIN `projectName.datasetName.ExclusionList` el
  ON REGEXP_REPLACE(h.eventInfo.eventLabel, r'^(https?://|www\.)', '') LIKE CONCAT(el.ThirdPartyURL, '%')
WHERE _TABLE_SUFFIX BETWEEN "20190101" AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) 
  AND type = 'EVENT' 
  AND h.eventInfo.eventCategory = 'EventName'
  -- 只保留没有匹配到排除项的记录
  AND el.ThirdPartyURL IS NULL

额外优化点

我把你原来的三次REPLACE换成了REGEXP_REPLACE,用正则表达式r'^(https?://|www\.)'可以一次性去掉http://、https://和www.前缀,代码更简洁也更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:35