如何在BigQuery中筛选不含指定文本的page_location数据
BigQuery 精准筛选page_location参数不含指定文本的解决方案
你之前的问题出在没精准定位到page_location这个参数就做过滤,导致把其他参数(比如page_referrer)的内容也纳入了判断逻辑。下面给两种实用的解决方法:
方法1:用EXISTS子查询(推荐,避免行重复)
这种方法会检查每一行数据里是否存在符合条件的page_location参数,既不会展开数据导致重复,又能精准筛选:
SELECT * FROM `你的项目ID.你的数据集ID.你的表名` WHERE EXISTS ( SELECT 1 FROM UNNEST(event_params) AS params WHERE params.key = 'page_location' AND NOT params.value.string_value LIKE '%/text/%' )
逻辑说明:
UNNEST(event_params)把数组类型的event_params展开成单行的参数记录- 先筛选出
key为page_location的参数,再判断它的string_value不包含指定文本 EXISTS确保只要当前原始行里存在符合条件的参数,就保留该行
方法2:展开参数后筛选(适合需要单独处理参数的场景)
如果需要把page_location的值单独提取出来展示,可以用这种方式,注意最后要去重或者分组避免重复行:
SELECT DISTINCT t.*, params.value.string_value AS page_location FROM `你的项目ID.你的数据集ID.你的表名` t, UNNEST(t.event_params) AS params WHERE params.key = 'page_location' AND NOT params.value.string_value LIKE '%/text/%'
逻辑说明:
- 展开
event_params后,先筛选出page_location参数,再过滤掉包含指定文本的记录 - 用
DISTINCT或者GROUP BY确保原始行不会因为展开参数而重复
内容的提问来源于stack exchange,提问作者Champion
相关产品推荐
相关产品推荐

