【发布时间】:2018-07-30 16:21:04
【问题描述】:
问题:我想为我的 android 用户提取按用户 ID 分组并按发生时间排序的 Firebase 事件数据流。我在下面创建了两个脚本,但不幸的是,在这两个脚本中,我似乎都无法正确完成最后一部分,即首先成功地将所有 app_instance_ids 分组,而不管时间戳如何。我应该考虑改用不同的 user_ids 吗?
尝试 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;
不成功的尝试 2:
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;
正确答案(Amod 的答案转换为 New Export Schema):
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
【问题讨论】:
-
如果您从查询中删除 c.ev_name 是否会返回正确的顺序?
-
是的,确实如此。但是我怎么加入它错了,因为我的数据集中需要那个列。
-
试试这个 - 在第一个脚本中在最后一个 ORDER BY 2 ASC 之后添加 GROUP BY 2(原因 chk 回答了查询 - stackoverflow.com/questions/5355585/…)
-
试用提供的解决方案?
-
是的,谢谢 Amod :) 我更新了上面的答案。
标签: firebase google-bigquery firebase-analytics