BigQuery中的Firebase群组

时间:2018-02-11 11:43:13

标签: firebase google-bigquery firebase-analytics

我正在尝试使用BigQuery复制Firebase群组。我尝试了这篇文章中的查询:Firebase exported to BigQuery: retention cohorts query,但我得到的结果没有多大意义。

我设法让time_lag 0的用户类似于我在Firebase中看到的用户,但是,其余数字看起来不正确:

结果: enter image description here

缺少一个period_lag(仅见0,1和3 - > 2),每个滞后期的用户计数看起来也不正确!我希望看到类似的东西:

Firebase群组: enter image description here

我很确定问题在于如何将原始查询中的参数替换为来自Firebase的参数。以下是我在原始查询中更新的位:

#standardSQL
WITH activities AS (
  SELECT answers.user_dim.app_info.app_instance_id AS id,
    FORMAT_DATE('%Y-%m', DATE(TIMESTAMP_MICROS(answers.user_dim.first_open_timestamp_micros))) AS period
  FROM `dataset.app_events_*` AS answers
  JOIN `dataset.app_events_*` AS questions
  ON questions.user_dim.app_info.app_instance_id = answers.user_dim.app_info.app_instance_id
 -- WHERE CONCAT('|', questions.tags, '|') LIKE '%|google-bigquery|%' 

(...)

WHERE cohorts_size.cohort >= FORMAT_DATE('%Y-%m', DATE('2017-11-01'))
ORDER BY cohort, period_lag, period_label

所以我使用user_dim.first_open_timestamp_micros代替create_dateuser_dim.app_info.app_instance_id代替idparent_id。知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

我认为在如何以及将哪些数据检索到activities表中的概念存在误解。让我说明您链接的其他StackOverflow问题中呈现的案例与您尝试重现的案例之间的差异:

  • 在另一个问题中,answers.creation_date指的是未修复的日期值,并且可以为单个用户提供不同的值。我的意思是,同一个用户可以在两个不同的日期发布两个不同的答案,这样,您最终会得到两个activities条目,例如:{[ID:user1, date:2018-01],[ID:user1, date:2018-02],[ID:user2, date:2018-01]}
  • 在您的问题中,使用answers.user_dim.first_open_timestamp_micros是指过去修正的日期值,因为如上所述in the documentation,该变量指的是时间(以微秒为单位)用户首次打开应用。该值是唯一的,因此,对于每个用户,您只有一个activities条目,例如:{[ID:user1, date:2018-01],[ID:user2, date:2018-02],[ID:user3, date:2018-01]}

我认为这就是为什么您没有获得有关用户滞后保留的信息的原因,因为您不是每次用户访问应用程序时都记录,而是仅在他们第一次访问时记录。

您应该从以前共享的文档链接(可能是answers.user_dim.first_open_timestamp_microsevent_dim.date)中查找其他值,而不是使用event_dim.timestamp_micros,但您必须考虑这些字段引用事件而不是用户的帐户,因此您应首先进行一些预处理。出于测试目的,您可以使用publicly available BigQuery exports for Firebase

中的一些

最后,作为旁注, JOIN 一个表本身是没有意义的,因此关于您编辑的标准SQL查询,最好是:

#standardSQL
WITH activities AS (
  SELECT answers.user_dim.app_info.app_instance_id AS id,
    FORMAT_DATE('%Y-%m', DATE(TIMESTAMP_MICROS(answers.user_dim.first_open_timestamp_micros))) AS period
  FROM `dataset.app_events_*` AS answers
  GROUP BY id, period