如何在BigQuery中选择event_params.key的值?

11
我们的项目记录了一些事件,记录用户在页面上停留的时间。我们添加了一个名为 time_ms 的 event_params.key,其值显示了持续时间。 我该如何选择 'time_ms' 的总和?我尝试使用 SQL 语句但失败了。
SELECT *
FROM analytics_152426080.events_20190626
WHERE event_name = 'details_viewtime' AND
      event_params.key = 'time_ms'

它显示出错误信息:

'Cannot access field key on a value with type ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>> at [7:20]'.

我希望能够得到"time_ms"的总和,但是我必须先解决这个问题。


你应该明确 event_name 来自哪里 -- 参数还是直接来自表格。 - Gordon Linoff
1个回答

12

我认为你需要使用unnest

SELECT *
FROM analytics_152426080.events_20190626 e CROSS JOIN
     UNNEST(event_params) ep
WHERE e.event_name = 'details_viewtime' AND
      ep.key = 'time_ms';

我不确定实际值的位置,但类似于这样:

SELECT SUM(ep.value.int_value)
FROM analytics_152426080.events_20190626 e CROSS JOIN
     UNNEST(event_params) ep
WHERE ep.event_name = 'details_viewtime' AND
      ep.key = 'time_ms';

假设您要求和的值为整数。

这假定值列是某种数字。否则,您需要将其转换为数字。

或者,如果您想按行求和:

SELECT e.*,
       (SELECT SUM(ep.value.int_value)
        FROM UNNEST(event_params) ep
        WHERE ep.key = 'time_ms'
       ) as sum_ms
FROM analytics_152426080.events_20190626 e
WHERE e.event_name = 'details_viewtime'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接