【问题标题】:BigQuery SQL: filter on event sequenceBigQuery SQL:过滤事件序列
【发布时间】:2020-05-12 00:09:08
【问题描述】:

我想计算,对于每个app_id,有多少次event_type:store_app_view 后面跟着event_type:store_app_download 对于同一用户(“关注”表示event_time_utcstore_app_viewevent_time_utc 早于 store_app_download)。

样本数据:

WITH 
`project.dataset.dummy_data_init` AS (SELECT event_id FROM UNNEST(GENERATE_ARRAY(1, 10000)) event_id),

`project.dataset.dummy_data_completed` AS (SELECT event_id,
    user_id[OFFSET(CAST(20 * RAND() - 0.5 AS INT64))] user_id,
    app_id[OFFSET(CAST(100 * RAND() - 0.5 AS INT64))] app_id,
    event_type[OFFSET(CAST(6 * RAND() - 0.5 AS INT64))] event_type,
    event_time_utc[OFFSET(CAST(26 * RAND() - 0.5 AS INT64))] event_time_utc
  FROM `project.dataset.dummy_data_init`, 
     (SELECT GENERATE_ARRAY(1, 20) user_id),
     (SELECT GENERATE_ARRAY(1, 100) app_id),
     (SELECT ['store_app_view', 'store_app_view', 'store_app_download','store_app_install','store_app_update','store_fetch_manifest'] event_type),
     (SELECT GENERATE_TIMESTAMP_ARRAY('2020-01-01 00:00:00', '2020-01-26 00:00:00',
                                INTERVAL 1 DAY) AS event_time_utc))

Select * FROM `project.dataset.dummy_data_completed`

谢谢!

【问题讨论】:

  • 。 .样本数据和期望的结果真的很有帮助。

标签: sql filter count google-bigquery sequence


【解决方案1】:

我想为每个 app_id 计算 event_type: store_app_view 后面跟着 event_type: store_app_download 的次数。

您提供的查询似乎与此问题几乎没有联系,因此我将忽略它。

对于每个用户/应用程序对,您可以使用GROUP BY 获取与您的条件匹配的行:

select user_id, app_id
from t
group by user_id, app_id
having min(case when event_type = 'store_app_view' then event_time end) <
       max(case when event_type = 'store_app_download' then event_time end);

要获取每个 app 的总数,请使用子查询或 CTE:

select app_id, count(*)
from (select user_id, app_id
      from t
      group by user_id, app_id
      having min(case when event_type = 'store_app_view' then event_time end) <
             max(case when event_type = 'store_app_download' then event_time end)
     ) ua
group by app_id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多