在 Firebase Analytics BigQuery 数据库中按相同 ARRAY 或 STRUCT 中的两个值过滤查询
Posted
技术标签:
【中文标题】在 Firebase Analytics BigQuery 数据库中按相同 ARRAY 或 STRUCT 中的两个值过滤查询【英文标题】:Filtering query by two values in same ARRAY or STRUCTs in Firebase Analytics BigQuery database 【发布时间】:2020-12-31 03:23:11 【问题描述】:这个问题是这个initial question的后续问题。
在前面的示例中,我们发现了如何从 Firebase 的 Analytics 数据库中过滤 STRUCT 数组。
现在是最重要的新挑战:
我的想法是,因为我们已经这样做了:
UNNEST(event_params) AS ep
这意味着 event_params 现在被展平了,这意味着它的值来自以下 ARRAYS:
value.string_value:可以访问值; value.int_value:可以访问值; 等等..所以我的想法是,因为我设法访问了 value.string_value = 'Restaurant profile',所以访问示例中名为“restaurant_id”的其他值应该没问题,所以我添加了更多 AND声明:
ep.key = 'restaurant_id' AND
ep.value.int_value = 2045881 AND
但是正如你可以想象的那样,因为我发布了它,结果并不完全是预期的????????????即使从技术上讲 BigQuery 确实接受了我的解决方案:
知道我的初始查询出了什么问题以及如何解决吗?
【问题讨论】:
【参考方案1】:知道我的初始查询出了什么问题以及如何解决吗?
问题是ep.key
不能同时是firebase_screen
和restaurant_id
- 所以你需要使用OR
而不是使用AND
,如下例所示
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e, UNNEST(e.event_params) ep
WHERE e.platform = 'ios' AND (
(ep.key = 'firebase_screen' AND ep.value.string_value = 'Restaurant profile') OR
(ep.key = 'restaurant_id' AND ep.value.int_value = 2045881)
)
LIMIT 1000;
但是如果我需要这两个条件都成立呢? ...
我认为在这种情况下,您的初始查询不是最好的开始 - 请改用下面的方法
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e
WHERE e.platform = 'IOS' AND (
SELECT COUNT(*)
FROM e.event_params
WHERE
(key = 'firebase_screen' AND value.string_value = 'Restaurant profile') OR
(key = 'restaurant_id' AND value.int_value = 2045881)
) = 2
LIMIT 1000;
【讨论】:
但是如果我需要同时满足这两个条件怎么办?如果我使用OR,那么这意味着这个参数称为restaurant_id,它在“餐厅简介”之外的其他屏幕中使用也会被返回,这是错误的【参考方案2】:你可以使用exists
如下:
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e,
UNNEST(e.event_params) ep
WHERE e.platform = 'IOS'
AND ep.key = 'firebase_screen'
AND ep.value.string_value = 'Restaurant profile'
And exists (select 1 from UNNEST(e.event_params) epp
Where epp.key = 'restaurant_id'
AND epp.value.int_value = 2045881)
LIMIT 1000;
【讨论】:
以上是关于在 Firebase Analytics BigQuery 数据库中按相同 ARRAY 或 STRUCT 中的两个值过滤查询的主要内容,如果未能解决你的问题,请参考以下文章
关于 Analytics 屏幕报告的 Firebase Analytics 错误
Xamarin Firebase iOS Analytics 抛出 AOT MTOUCH ERROR MT3001 - Firebase.Analytics.dll
如何在 Xcode 的控制台中禁用 Firebase/Analytics 登录? [复制]