如何使用BigQuery查找连续的事件组?

时间:2019-03-21 04:12:30

标签: sql google-bigquery

我正在将Firebase Analytics与BigQuery结合使用。假设我需要为每天至少连续7天共享服务的用户提供一张代金券。如果某人连续两周分享,他们将获得2张优惠券,依此类推。

如何找到Firebase Analytics中记录的连续事件的分段?

以下是我可以查询出用户分享的具体日子的查询。但是我无法识别连续的片段。

SELECT event.user_id, event.event_date,
MAX((SELECT p.value FROM UNNEST(user_properties) p WHERE p.key='name').string_value)  as name,
MAX((SELECT p.value FROM UNNEST(user_properties) p WHERE p.key='email').string_value ) as email,
SUM((SELECT event_params.value.int_value from event.event_params where event_params.key = 'share_session_length')) as total_share_session_length

FROM `myProject.analytics_183565123.*` as event
where event_name like 'share_end'  
group by user_id,event_date
having total_share_session_length >= 1
order by user_id desc

这是输出:

enter image description here

1 个答案:

答案 0 :(得分:3)

  

如何找出连续记录的事件的片段

下面是BigQuery Standard SQL的示例-希望您可以采用针对特定用例的方法

#standardSQL
SELECT id, ARRAY_AGG(STRUCT(first_day, days) ORDER BY grp) continuous_groups
FROM (
  SELECT id, grp, MIN(day) first_day, MAX(day) last_day, COUNT(1) days
  FROM (
    SELECT id, day,
      COUNTIF(gap != 1) OVER(PARTITION BY id ORDER BY day) grp
    FROM (
      SELECT id, day,
        DATE_DIFF(day,LAG(day) OVER(PARTITION BY id ORDER BY day), DAY) gap
      FROM (
        SELECT DISTINCT fullVisitorId id, PARSE_DATE('%Y%m%d', t.date) day
        FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` t
      )
    )
  )
  GROUP BY id, grp
  HAVING days >= 7
)
GROUP BY id
ORDER BY ARRAY_LENGTH(continuous_groups) DESC

有结果

enter image description here