使用 BigQuery 计算当前 7 天的活跃用户?

Posted

技术标签:

【中文标题】使用 BigQuery 计算当前 7 天的活跃用户?【英文标题】:Calculating a current day 7 day active user with BigQuery? 【发布时间】:2017-04-07 17:28:05 【问题描述】:

如果我没记错的话,计算当天活跃用户应该很简单。只需将今天和 x 天(7 天活跃将是 6 天)取回,然后计算不同的 ID。对于 2 天的活跃用户,我有以下查询:

WITH allTables AS (
  SELECT 
    CONCAT(user_dim.app_info.app_id, ':', user_dim.app_info.app_platform) AS app,
    event.date,
    user_dim.app_info.app_instance_id as users
  FROM `dataset.app_events_intraday_20170407`
  CROSS JOIN
    UNNEST(event_dim) AS event

  UNION ALL
  SELECT 
    CONCAT(user_dim.app_info.app_id, ':', user_dim.app_info.app_platform) AS app,
    event.date,
    user_dim.app_info.app_instance_id as users
  FROM `dataset.app_events_20170406`
  CROSS JOIN
    UNNEST(event_dim) AS event
) SELECT COUNT(DISTINCT(users)) AS unique,
   COUNT(users) as total
FROM allTables

这适用于 2 天的活动,但对于 7 天或 30 天,我会合并所有这些表。这是正确的还是需要修改?

【问题讨论】:

【参考方案1】:

您应该尝试使用Querying Multiple Tables Using a Wildcard Table,而不是使用 UNION ALL

试试下面的方法

#standardSQL
WITH allTables AS (
  SELECT 
    CONCAT(user_dim.app_info.app_instance_id, ':', user_dim.app_info.app_platform) AS app,
    event.date,
    user_dim.app_info.app_instance_id AS users
  FROM `dataset.app_events_intraday_*`, UNNEST(event_dim) AS event
  WHERE _TABLE_SUFFIX BETWEEN '20170401' AND '20170407' 
  UNION ALL
  SELECT 
    CONCAT(user_dim.app_info.app_instance_id, ':', user_dim.app_info.app_platform) AS app,
    event.date,
    user_dim.app_info.app_instance_id AS users
  FROM `dataset.app_events_*`, UNNEST(event_dim) AS event
  WHERE _TABLE_SUFFIX BETWEEN '20170401' AND '20170407' 
) 
SELECT 
  COUNT(DISTINCT(users)) AS unique,
  COUNT(users) AS total
FROM allTables

您可以使用下面的WHERE 子句使其更通用

WHERE _TABLE_SUFFIX 
   BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 6 DAY)) 
   AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())

另外请注意:我将 user_dim.app_info.app_id 中的 app_id 更改为 app_instance_id,因为我认为这是您这边的拼写错误 - 但我可能是错的

【讨论】:

我有很多表,所以 union all 是必需的,通配符提取了太多数据。 你是什么意思?它只需要那些被引用的表和列! 我现在正在运行使用通配符的查询,它们限制了他们选择的行但需要很长时间才能处理。 我错过了带有_table_Suffix的部分...我不知道那个哇。 我很高兴你现在完整地阅读了它:o) - 那么它现在对你有用吗?顺便提一句。在我的回答中 - 我提供了相应文档的链接

以上是关于使用 BigQuery 计算当前 7 天的活跃用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 Firebase 中的 MAU?我需要 BigQuery 吗?

过去 30 天的移动平均线

将超过 7 天的数据插入分区 BigQuery 表

如何计算Firebase中的MAU?我需要BigQuery吗?

如何使用 BigQuery(参与度)计算 DAU/MAU

如何使用窗口函数获取每个日期值的今天、过去 7 天、过去 30 天的指标?