在 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_screenrestaurant_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 登录? [复制]

找不到 com.google.firebase:firebase-analytics-ktx:。要求:项目:app

Firebase Analytics 阻止正确使用动态链接

颤振:致命错误:找不到模块“firebase_analytics”