按用户Id分组的BigQuery Firebase事件日志

按用户Id分组的BigQuery Firebase事件日志,firebase,google-bigquery,firebase-analytics,Firebase,Google Bigquery,Firebase Analytics,问题:我想为我的android用户提取一系列Firebase事件数据,这些数据按用户id分组,并按发生时间排序。我创建了下面的两个脚本,但不幸的是,在这两个脚本中,我似乎无法正确地获得最后一部分,即成功地将所有app_instance_id首先分组,而不考虑时间戳。我是否应该考虑改用不同的用户ID 尝试1失败: SELECT d.userid, c.ev_timestamp, c.ev_name FROM (SELECT user_dim.app_info.app_

问题:我想为我的android用户提取一系列Firebase事件数据,这些数据按用户id分组,并按发生时间排序。我创建了下面的两个脚本,但不幸的是,在这两个脚本中,我似乎无法正确地获得最后一部分,即成功地将所有app_instance_id首先分组,而不考虑时间戳。我是否应该考虑改用不同的用户ID

尝试1失败:

SELECT
  d.userid,
  c.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid
ORDER BY 2 ASC
LIMIT 1000;
SELECT
  d.userid,
  d.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid,
        event.timestamp_micros as ev_timestamp
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1,2
      ORDER BY 2 ASC) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid AND d.ev_timestamp = c.ev_timestamp
#ORDER BY 2 ASC
LIMIT 1000;
SELECT user_pseudo_id, event_timestamp, event_name
FROM `xxxx.analytics_xxxx.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20180630' AND '20180702'
AND user_first_touch_timestamp BETWEEN 1530453600000000 AND 1530468000000000
AND platform = "ANDROID"
ORDER BY 1,2 ASC
LIMIT 1000

尝试2失败:

SELECT
  d.userid,
  c.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid
ORDER BY 2 ASC
LIMIT 1000;
SELECT
  d.userid,
  d.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid,
        event.timestamp_micros as ev_timestamp
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1,2
      ORDER BY 2 ASC) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid AND d.ev_timestamp = c.ev_timestamp
#ORDER BY 2 ASC
LIMIT 1000;
SELECT user_pseudo_id, event_timestamp, event_name
FROM `xxxx.analytics_xxxx.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20180630' AND '20180702'
AND user_first_touch_timestamp BETWEEN 1530453600000000 AND 1530468000000000
AND platform = "ANDROID"
ORDER BY 1,2 ASC
LIMIT 1000

正确答案(Amod的答案转换为新的导出模式):

SELECT
  d.userid,
  c.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid
ORDER BY 2 ASC
LIMIT 1000;
SELECT
  d.userid,
  d.ev_timestamp,
  c.ev_name
FROM (SELECT 
        user_dim.app_info.app_instance_id as userid,
        event.timestamp_micros as ev_timestamp
      FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
      WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      GROUP BY 1,2
      ORDER BY 2 ASC) AS d
  LEFT JOIN (SELECT user_dim.app_info.app_instance_id as userid,
            event.timestamp_micros as ev_timestamp,
            event.name as ev_name
            FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS event
            WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
            AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000) AS c
  ON d.userid = c.userid AND d.ev_timestamp = c.ev_timestamp
#ORDER BY 2 ASC
LIMIT 1000;
SELECT user_pseudo_id, event_timestamp, event_name
FROM `xxxx.analytics_xxxx.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20180630' AND '20180702'
AND user_first_touch_timestamp BETWEEN 1530453600000000 AND 1530468000000000
AND platform = "ANDROID"
ORDER BY 1,2 ASC
LIMIT 1000
试试这个

    SELECT user_dim.app_info.app_instance_id as userid, X.timestamp_micros,X.name as ev_name,X
FROM `firebase-analytics-sample-data.ios_dataset.app_events_*`, UNNEST(event_dim) AS X
WHERE _TABLE_SUFFIX BETWEEN '20160601' AND '20160603'
      AND user_dim.first_open_timestamp_micros BETWEEN 1464789600000000 AND 1464962400000000
      and user_dim.app_info.app_instance_id like 'C4%'
      order by 1,2 ASC


如果从查询中删除c.ev_名称,它是否返回正确的顺序?是的,它返回正确的顺序。但是我怎么会加入错误,因为我的数据集中需要该列。试试这个-在第一个脚本中,在最后一个订单后添加2个组,按2 ASC(原因chk回答查询-)试试提供的解决方案?是的,谢谢Amod:)我更新了上面的答案。