在BigQuery中按嵌套参数过滤排除Firebase事件的问题
在BigQuery中过滤排除指定Firebase事件的正确方法
需求:排除所有满足event_params.key = 'firebase_event_origin'且event_params.value.string_value = 'auto'的Firebase事件行,保留剩余事件数据。
你之前两种方法的错误原因
- 第一种方法错误:
event_params是数组结构体类型,不能直接和普通(key, value)结构体用<>运算符比较,类型不匹配导致报错。 - 第二种方法错误:EXISTS子查询中
from a写法错误,a是外层表的别名,子查询需要通过UNNEST(a.event_params)展开数组后再筛选,而非直接从a表查询。
正确的实现方法
方法一:NOT EXISTS + UNNEST(推荐,高效直观)
SELECT * FROM `你的项目ID.你的数据集ID.events_intraday_*` AS a WHERE NOT EXISTS ( SELECT 1 FROM UNNEST(a.event_params) AS params WHERE params.key = 'firebase_event_origin' AND params.value.string_value = 'auto' )
逻辑:通过UNNEST把event_params数组拆成单行的结构体,检查当前事件行是否存在符合条件的参数。如果不存在,则保留该行,正好排除掉目标事件。
方法二:使用ARRAY函数结合筛选
SELECT * FROM `你的项目ID.你的数据集ID.events_intraday_*` AS a WHERE NOT ( -- 先判断是否存在指定key EXISTS (SELECT 1 FROM UNNEST(a.event_params) WHERE key = 'firebase_event_origin') -- 再判断该key对应的value是否为auto AND 'auto' = ( SELECT value.string_value FROM UNNEST(a.event_params) WHERE key = 'firebase_event_origin' ) )
内容的提问来源于stack exchange,提问作者George Koreshkov
相关产品推荐
相关产品推荐

