如何在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按事件日期分组,操作系统