我正在开展一个项目,从 BigQuery 中的 Google Analytics 数据构建一些查询,以复制某个特定 KPI 的一些报告,我有一个表格,其中包含我需要从 Google Analytics 数据中排除的网站列表,以便获取正确的度量。
我的 list 可能有以下内容:
网站名称.com
但是,我需要将其与 BigQuery 中的 eventLabel 列相匹配,其中 URL 可能返回为:
http://sitename.com/subpage/extra-subpage
我不能做 Not In 因为这需要直接匹配,我尝试使用 like 语句但是我收到以下错误
Scalar subquery produced more than one element
我真的不知道该怎么做,我想知道我是否需要做一个查询来说明字符串是否匹配(因为如果我使用内部连接然后使用这个新表来执行排除,我可以让它工作因为我可以保留 eventLabel,然后基于此做我的 Not In?
SELECT Distinct
h.eventinfo.eventAction eventAction,
h.eventinfo.eventlabel 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'
and Replace(Replace(Replace(h.eventInfo.eventLabel,'http://',''),'https://',''),'www.','')
Not like (select concat(ThirdPartyURL,'%') from `projectName.datasetName.ExclusionList`)
我希望以上是有道理的。
TIA。
最佳答案
重现您的问题后,解决方案是使用 NOT IN
而不是 NOT LIKE
如下:
WITH `projectName.datasetName.ExclusionList` AS
(SELECT 'label1' AS ThirdPartyURL UNION ALL
SELECT 'label2')
SELECT DISTINCT h.eventinfo.eventAction eventAction,
h.eventinfo.eventlabel eventlabel
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`,
unnest(Hits) h
WHERE _TABLE_SUFFIX BETWEEN "20170801" AND "20170802"
AND TYPE = 'EVENT'
AND h.eventInfo.eventCategory = 'EventName'
AND Replace(Replace(Replace(h.eventInfo.eventLabel, 'http://', ''), 'https://', ''), 'www.', '')
NOT IN
(SELECT ThirdPartyURL FROM `projectName.datasetName.ExclusionList`)
这是link到 BigQuery 相关的 SQL 文档
关于sql - 在 SQL 中,我可以使用 like 或 contains 子句连接数据以排除某些值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55593882/