我在BigQuery中有一个160GB的数据库,代表上个月从应用程序发送的事件。每行都有(以及其他)日期字段,userId字段和事件字段。
我需要做的是找出有多少独特用户在某一天使用过该应用。例如,如果用户X在2017/09/15使用了应用程序三次,那么他当天只计算一次,但如果他在2017/09 / 15,2017 / 09/16和2017/09/17使用该应用程序,计算他在那些日子里的每一天(只有一次)。
我尝试做的是按userId和按日期对用户进行分组,然后分别计算每个日期的userIds数量,例如:
SELECT
userId,
DATE(date) AS date_conv
FROM
[TABLE]
WHERE
userId IS NOT NULL
GROUP BY
date_conv,
userId
ORDER BY
userId
但是,即使增加了计费等级,此查询也会返回“超出资源”,因此如果有更高效的方式,那将会很棒。
答案 0 :(得分:1)
如果您想计算唯一身份用户的数量,请使用count(distinct)
:
SELECT DATE(date) AS date_conv, COUNT(DISTINCT userId) as numusers
FROM [TABLE]
GROUP BY DATE(date)
ORDER BY DATE(date);
由于ORDER BY
,您可能会超出资源。
编辑:
我还没有对BigQuery上的大量数据尝试COUNT(DISTINCT)
。在某些数据库中,嵌套聚合可以更好地优化:
SELECT DATE(date) AS date_conv, COUNT(*) as numusers
FROM (SELECT DATE(date) AS date_conv, userId
FROM [TABLE]
GROUP BY DATE(date), userId
) du
GROUP BY DATE(date)
ORDER BY DATE(date);