如何在Firebase Bigquery SQL中按“操作系统”获取“会话持续时间”组?
我尝试按操作系统设备、操作系统和日期事件日期获取平均会话持续时间组 在中,他们给我们这个查询来获得会话的平均持续时间如何在Firebase Bigquery SQL中按“操作系统”获取“会话持续时间”组?,sql,firebase,google-bigquery,Sql,Firebase,Google Bigquery,我尝试按操作系统设备、操作系统和日期事件日期获取平均会话持续时间组 在中,他们给我们这个查询来获得会话的平均持续时间 SELECT SUM(engagement_time) AS total_user_engagement FROM ( SELECT user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = "engagement_time_msec") AS enga
SELECT SUM(engagement_time) AS total_user_engagement
FROM (
SELECT user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key =
"engagement_time_msec") AS engagement_time
FROM `FIREBASE_PROJECT`
)
WHERE engagement_time > 0
GROUP BY user_pseudo_id
此查询提供按用户ID列出的总用户参与度。每行都是不同的用户:
row|total_user_engagement
---|------------------
1 |989646
2 |225655
3 |125489
4 | 58496
...|......
但是我不知道我必须在哪里添加操作系统和event_date变量才能按操作系统和日期获取这些信息。我尝试了不同的查询,但没有结果。例如,为了通过操作系统得到这个结果,我尝试了以下方法
SELECT SUM(engagement_time) AS total_user_engagement
FROM (
SELECT device.operating_system,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key =
"engagement_time_msec") AS engagement_time
FROM `FIREBASE_PROJECT`
)
WHERE engagement_time > 0
GROUP BY device.operating_system
但它给了我一个错误消息error:unrecognedname:deviceat[9:10]。在其他查询中,可识别设备操作系统
例如,在其中:
SELECT
event_date,
device.operating_system as os_type,
device.operating_system_version as os_version,
device.mobile_brand_name as device_brand,
device.mobile_model_name as device_model,
count(distinct user_pseudo_id) as all_users
FROM `FIREBASE Project`
GROUP BY 1,2,3,4,5
我想要的结果是这样的:
row|event_date|OS |total_user_engagement
---|----------------------------------------
1 |20191212 |ios |989646
2 |20191212 |android|225655
3 |20191212 |ios |125489
4 |20191212 |android| 58496
...
谢谢此错误可能是因为您在外部查询中引用了变量设备,而此变量仅在内部查询子查询中可见。我相信,通过将查询的最后一行从GROUP by device.OPERTIONING\u system更改为GROUP by device,可以解决这个问题 到 按操作系统分组 希望这能让这里发生的事情更清楚:内部查询正在访问表FIREBASE_项目,并从嵌套的列设备返回field operating_系统。外部查询访问内部查询的结果,因此它只查看返回的字段operating_system,而不查看嵌套变量设备中的原始上下文信息。这就是为什么尝试在此级别引用设备将失败的原因
在您发布的另一个示例中,此问题不会出现,因为只有一个简单的查询。错误可能是因为您在外部查询中引用了变量设备,而此变量仅在内部查询子查询中可见。我相信,通过将查询的最后一行从GROUP by device.OPERTIONING\u system更改为GROUP by device,可以解决这个问题 到 按操作系统分组 希望这能让这里发生的事情更清楚:内部查询正在访问表FIREBASE_项目,并从嵌套的列设备返回field operating_系统。外部查询访问内部查询的结果,因此它只查看返回的字段operating_system,而不查看嵌套变量设备中的原始上下文信息。这就是为什么尝试在此级别引用设备将失败的原因
在您发布的另一个示例中,此问题不会出现,因为只有一个简单的查询。您需要提供示例数据和所需结果。您提到的列没有显示在您的查询中。感谢您的反馈@GordonLinoff。我做了更详细的更改。您需要提供示例数据和期望的结果。您提到的列没有显示在您的查询中。感谢您的反馈@GordonLinoff。我做了更详细的更改。谢谢你的反馈,它很有效!但是我还必须在外部查询中添加操作系统引用。从SELECT device.operating_system中选择SUMengagement_time作为总用户_engagement,operating_system,从“FIREBASE\u项目”中选择value.int\u value FROM UNNESTevent\u params,其中key=engagement\u time\u msec作为engagement\u time,其中engagement\u time>0按操作系统分组,但如何添加事件日期以获得所需的最终输出?当我将其添加到外部查询中时,我再次收到此错误消息“名称无法识别”。谢谢,这可能是因为您的内部查询没有返回事件\ u日期。为了按事件日期分组,您应该将其包含在与操作系统或设备相同的位置。操作系统:内部查询结果、外部查询结果和group by子句。非常感谢您抽出时间!它起作用了。最后的代码是选择操作系统、事件日期、SUMengagement时间作为总用户参与度,从选择设备、操作系统、事件日期、从未设置事件参数中选择value.int值,其中key=engagement\u time\u msec作为“Firebase Project”中的参与度时间,其中参与度时间>0按事件日期分组,操作系统谢谢你的反馈,它很有效!但是我还必须在外部查询中添加操作系统引用。从SELECT device.operating_system中选择SUMengagement_time作为总用户_engagement,operating_system,从“FIREBASE\u项目”中选择value.int\u value FROM UNNESTevent\u params,其中key=engagement\u time\u msec作为engagement\u time,其中engagement\u time>0按操作系统分组,但如何添加事件日期以获得所需的最终输出?当我将其添加到外部查询中时,我再次收到此错误消息“名称无法识别”。谢谢,这可能是因为您的内部查询没有返回事件\ u日期。为了按事件日期分组,您应该将其包含在与操作系统或设备相同的位置。操作系统:内部查询结果
ts,外部查询结果和GROUPBY子句。非常感谢您抽出时间!它起作用了。最后的代码是选择操作系统、事件日期、SUMengagement时间作为总用户参与度,从选择设备、操作系统、事件日期、从未设置事件参数中选择value.int值,其中key=engagement\u time\u msec作为“Firebase Project”中的参与度时间,其中参与度时间>0按事件日期分组,操作系统