我正在尝试使用BigQuery复制Firebase群组。我尝试了这篇文章中的查询:Firebase exported to BigQuery: retention cohorts query,但我得到的结果没有多大意义。
我设法让time_lag 0的用户类似于我在Firebase中看到的用户,但是,其余数字看起来不正确:
缺少一个period_lag(仅见0,1和3 - > 2),每个滞后期的用户计数看起来也不正确!我希望看到类似的东西:
我很确定问题在于如何将原始查询中的参数替换为来自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_date
和user_dim.app_info.app_instance_id
代替id
和parent_id
。知道我做错了吗?
答案 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_micros
或event_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